【发布时间】:2017-11-15 14:31:35
【问题描述】:
我编写了一个简单的(或者我认为是这样的)C# 应用程序来读取串行数据并将其绘制在 win 表单仪表控件中。串行数据线每隔 5 秒出现一次。问题是,应用程序在一些更新后停止更新图表,我无法弄清楚发生了什么。代码如下:
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 即可重新开始图表更新。
谁能帮忙?
【问题讨论】:
标签: c# multithreading serial-port