我正在做一个飞行控制器程序在c#和这接收数据函数,该程序将运行约2分钟前,程序崩溃,并返回错误无效JSON原语。我已经尝试谷歌搜索,并没有找到任何关于我的问题,因为我看不到任何问题的程序。函数反序列化JSON是在这里,这也是导致错误并返回无效JSON原语消息的行。
void ReceiveData() //This function is used to listen for messages from the flight simulator
{
while (true)
{
NetworkStream stream = client.GetStream(); //sets the newtwork stream to the client's stream
byte[] buffer = new byte[256]; //Defines the max amount of bytes that can be sent
int bytesRead = stream.Read(buffer, 0, buffer.Length);
if (bytesRead > 0)
{
string jsonreceived = Encoding.ASCII.GetString(buffer, 0, bytesRead); //Converts the recieved data into ASCII for the json variable
JavaScriptSerializer Deserializer = new JavaScriptSerializer();
TelemetryUpdate telemetry = Deserializer.Deserialize<TelemetryUpdate>(jsonreceived);
this.Invoke(new Action(() => { TelemetryReceivedLabel.Text = jsonreceived; })) ;
Updatelabels(telemetry); //runs the update labels function with the telemetry data as an arguement
lock (@"c:\temp\BlackBox.txt")
{
File.AppendAllText(@"c:\temp\BlackBox.txt", "Data Received" + jsonreceived + DateTime.Now.ToString("h:mm:ss tt") + Environment.NewLine); //this appends the json data to the blackbox file
}
}
}
}
该程序工作完全正常,并传递信息到变量如何我想要它太像这样,我已经记录了JSON数据t检查,如果变量名匹配等,他们都适合正确。
void Updatelabels(TelemetryUpdate telemetry) //this function updates all the labels with received data
{
if (this.InvokeRequired) //invokes the telemetryupdatedelegate
{
this.Invoke(new TelemetryUpdateDelegate(Updatelabels), telemetry);
return;
}
altitudelabel.Text = string.Format("{0:0.00}", telemetry.Altitude);
speedlabel.Text = string.Format("{0:0.00}", telemetry.Speed);
pitchlabel.Text = string.Format("{0:0.00}", telemetry.Pitch);
verticalspeedlabel.Text = string.Format("{0:0.00}", telemetry.VerticalSpeed);
throttlelabel.Text = string.Format("{0:0.00}", telemetry.Throttle);
elevatorspeedlabel.Text = string.Format("{0:0.00}", telemetry.ElevatorPitch);
WarningUpdateEvent?.Invoke(telemetry); //invokes the warning update event
ReceivedDataGrid.Rows.Insert(0,telemetry.Altitude, telemetry.Speed, telemetry.Pitch, telemetry.VerticalSpeed, telemetry.Throttle, telemetry.ElevatorPitch, telemetry.WarningCode); //populates the datagrid with the received data
ReceivedDataGrid.AutoResizeColumns(); //resizes the columns to fit properly
}
1条答案
按热度按时间jdgnovmf1#
此问题似乎源于与datagrid相关的内存泄漏。