我寫了一個簡單的(或者我以爲)C#應用程序來讀取串行數據,並在勝利表格控制中繪製圖表。串行數據線每隔5秒發生一次。問題是,該應用停止更新一些更新後的圖表,我無法弄清楚發生了什麼。這裏是代碼:c#串行通信問題(線程?)
using System;
using System.IO.Ports;
using System.Windows.Forms;
namespace SimplifiedTempChart
{
public partial class Form1 : Form
{
float frcvdata;
float test;
public delegate void DisplayTempChartDelegate(float temperature);
public DisplayTempChartDelegate _DisplayTempChart;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
_DisplayTempChart = new DisplayTempChartDelegate(DisplayTempChart);
}
private void serialDataReceivedEventHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sData = sender as SerialPort;
string recvData = sData.ReadExisting();
float.TryParse(recvData, out frcvdata);
test = frcvdata * 100;
gaugeControl1.Invoke((MethodInvoker)delegate { _DisplayTempChart(test); });
}
public void DisplayTempChart(float temperature)
{
gaugeControl1.SetPointerValue("Scale1", "Pointer1", temperature);
}
private void button1_Click(object sender, EventArgs e)
{
SerialPort aSerialPort = new SerialPort("COM17");
aSerialPort.BaudRate = 9600;
aSerialPort.Parity = Parity.None;
aSerialPort.StopBits = StopBits.One;
aSerialPort.DataBits = 8;
aSerialPort.Open();
aSerialPort.DataReceived += new SerialDataReceivedEventHandler(serialDataReceivedEventHandler);
}
}
}
我添加了一個斷點來指示serialDataReceivedEventHandler何時被命中。下面是調試輸出會話:
serialDataReceivedEventHandler打 serialDataReceivedEventHandler打 serialDataReceivedEventHandler打 serialDataReceivedEventHandler打 serialDataReceivedEventHandler打 serialDataReceivedEventHandler打 serialDataReceivedEventHandler打 線程0x1a04已退出,代碼爲0(爲0x0)。 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 線程0x2200已退出,代碼0(爲0x0)。 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 線程0x22fc已經退出,代碼0(爲0x0)。 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 serialDataReceivedEventHandler擊中 線程0x1720已退出,代碼0(爲0x0)。 線程0x18a8已退出代碼0(0x0)。 線程0xed0已退出,代碼爲0(0x0)。 線程0xf74已退出,代碼爲0(0x0)。 線程0x5b4已退出,代碼爲0(0x0)。 線程0x1b7c已退出代碼0(0x0)。 線程0x1d2c已退出代碼0(0x0)。
當應用程序停止更新圖表時,'線程退出'事件確實堆積 - 這看起來很可疑,但我不確定,我不明白如何開始解決此問題。
我可以重新啓動圖表更新只需按下窗體上的button1。
任何人都可以幫忙嗎?
好點。我繼續前進,包括只是爲了安全,但是沒有任何解析失敗,問題依然存在。 –
frcvdata的值有多大?將一個非常大的數乘以100可能會給出一個浮點錯誤,但有一個例外。 – jdweng
0.0