我想每秒序列化我的模型並將其推送到服務器。我已經設置了每秒執行一次的定期任務。我調用SendNewMessage來執行推送。 從構造函數調用的第一個方法調用SendNewMessage()運行良好,沒有任何例外或問題。在WPF應用程序中使用NewtonSoft序列化模型
當異步任務嘗試調用SendNewMessage時,出現異常,我的應用程序關閉。它是NewtonSoft代碼:
String PushModelToServer = JsonConvert.SerializeObject(this,jss);從而未能
託管調試助手 'FatalExecutionEngineError' 已檢測到問題的 「C:\用戶\ snovva \來源\工作區\ HMI \ HMI.ViSoft \ BIN \ 86 \調試\ HMI.ViSoft.vshost。可執行程序'。 附加信息:運行時遇到致命錯誤。錯誤的地址是0x71041771,線程0x2788。錯誤代碼是0xc0000005。此錯誤可能是CLR中的錯誤,也可能是用戶代碼中不安全或不可驗證的部分。此錯誤的常見來源包括COM-interop或PInvoke的用戶編組錯誤,這可能會破壞堆棧。
public class Model : ModelBase
{
public Model()
{
PeriodicTask.Run(() =>
{
SendNewMessage();
},
TimeSpan.FromSeconds(1));
SendNewMessage();
}
public void SendNewMessage()
{
// Send the message
JsonSerializerSettings jss = new JsonSerializerSettings();
jss.Formatting = Newtonsoft.Json.Formatting.Indented;
String PushModelToServer = JsonConvert.SerializeObject(this, jss);
sendMessage(System.Text.Encoding.Unicode.GetBytes(PushModelToServer));
}
}
public class PeriodicTask
{
public static async Task Run(Action action, TimeSpan period, CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
await Task.Delay(period, cancellationToken);
if (!cancellationToken.IsCancellationRequested)
action();
}
}
public static Task Run(Action action, TimeSpan period)
{
return Run(action, period, CancellationToken.None);
}
}
更多信息按照要求: 構造函數內運行線10的電話。序列化是第一次。由於模型中的數據正在改變,我每秒都會推動這個模型來更新服務器。這是失敗的異步調用。隨着時間的推移,模型中的數據將發生變化。
那麼一定要有你想要序列化的類,這會使序列化程序變得瘋狂。 – Marty
我相信OP說這個呼叫(在線10)有效,但是在lambda內線7上的呼叫沒有。如果該類用正確的屬性修飾,它應該可以正常工作。也許OP可以澄清這個例子,以顯示哪個調用與評論一起工作,並且可以用更多細節來擴展該問題。 –
@KoryGill你是對的。我應該「裝飾」哪些屬性?我以前沒有這樣做過。我只想要基本上是字符串,浮動和布爾基本類型的公共屬性。 – Snovva1