C#SerialPort DataReceived事件随机滞后

时间:2016-05-27 17:50:18

标签: c# .net serial-port

我有一个设备(一个缩放控制器),盲目地在串行端口上发送帧。无需回复。使用串行终端客户端(Putty)我可以看到每秒传输1帧,这是非常一致的。

现在,我做了一点代码:

mSerialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
mSerialPort.DataReceived += SerialPort_DataReceived;
mSerialPort.ReadTimeout = 1000;

mSerialPort.Open();

private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    string data = mSerialPort.ReadExisting();
    this.OnDataReceived(data);
}

有时这样可以正常工作,SerialPort_DataReceived按预期调用。然而,它经常和随机地发生,事件不会被触发几秒钟(例如5秒,有时甚至更多),然后,在一次调用中所有堆叠的帧数据都会触发所有突发事件。

我尝试将握手设置为RequestToSend而不做任何更改。此外,它不是挂起的ReadExisting()方法。实际上是停止触发的事件。

我已经阅读了关于事件根本没有解雇或者在关闭时造成延迟的线索,但没有任何帮助。我认为DataReceived在一个单独的线程中触发。有什么东西可以减慢那个线程,甚至暂停它吗?

还有其他想法吗?

0 个答案:

没有答案