随机时间过后,接收到的C#串行端口数据无法触发
本文关键字:数据 串行端口 时间 随机 | 更新日期: 2023-09-27 18:26:05
我使用Visual Studio C#WPF SerialPort
类使用USB电缆和驱动程序与微控制器通信。
我想连续读取COM端口的输入。
这是我目前的实现方式:
public SerialConnectionHandler()
{
port = new SerialPort("COM3");
port.BaudRate = 9600;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Handshake = Handshake.None;
port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
port.Open();
}
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
String indata = port.ReadLine();
Debug.WriteLine(indata);
processInput(inputData);
if (port.IsOpen) Debug.WriteLine("--Port is Open--");
}
在一段未指定的时间后,我的输出控制台报告至少有5个线程以代码0结束。这有时需要几秒钟、几分钟甚至更长的时间。
我无法重现这个问题。
端口设置匹配。
Datareceived called
--Port is Open--
Datareceived called
--Port is Open--
Datareceived called
--Port is Open--
Der Thread 0xbb4 hat mit Code 0 (0x0) geendet.
Datareceived called
--Port is Open--
Datareceived called
--Port is Open--
Datareceived called
--Port is Open--
Datareceived called
--Port is Open--
Datareceived called
--Port is Open--
Datareceived called
线程结束是随机发生的,但在某一点上,会发生许多线程结束报告。从现在起将不再触发该事件。
据报道,就在这种情况发生之前,该端口已打开。
--Port is Open--
Datareceived called
--Port is Open--
Datareceived called
--Port is Open--
Der Thread 0x3bc hat mit Code 0 (0x0) geendet.
Der Thread 0x2f54 hat mit Code 0 (0x0) geendet.
Der Thread 0x2ea0 hat mit Code 0 (0x0) geendet.
Der Thread 0x1a6c hat mit Code 0 (0x0) geendet.
Der Thread 0x308 hat mit Code 0 (0x0) geendet.
Der Thread 0x2b0c hat mit Code 0 (0x0) geendet.
Der Thread 0x7fc hat mit Code 0 (0x0) geendet.
所以我注意到我也遇到了同样的问题。DataReceived
在一个项目上运行得很好,正如预期的那样,但在另一个项目——这个问题上。
事实证明,格洛林是对的。运行应用程序几秒钟后,我看到的The thread 0xc28 has exited with code 0
是因为我将所有这些代码保存在一个单独的类USBCommunicationManager
中,从我的窗口类(我使用的是WPF)调用,如下所示:
new USBCommunicationManager(this);
我只是简单地初始化它,而不是将它分配给任何变量,这就是为什么垃圾收集器后来将它捡起来并结束串行读取线程。只是这样改变,解决了问题:
USBCommunicationManager usbCommunicationManager;
..
..
usbCommunicationManager = new USBCommunicationManager(this);