此问题的原因是:.Net串口通信中将0x1A当作EOF处理,接收到EOF会触发两次数据到达事件,如果在第一次事件处理时用Read函数将数据读空,那么下一次调用Read时程序就会block,直到有新的数据到达。
解决方法:0x1A触发的两次事件,一次是EOF,一次是普通数据,在事件处理程序中判断事件类型,如果是EOF事件则不进行读操作。代码如下:
点击(此处)折叠或打开
- private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) {
- if (e.EventType == SerialData.Eof)
- return;
- this.Invoke(serialRecvDelegate);
- }
参考:
MSDN:https://social.msdn.microsoft.com/Forums/en-US/9621aa2e-9b1e-4024-a217-5b340b7e8f54/serial-port-issue-with-received-1a-hexadecimal-byte-in-net-20?forum=netfxbcl
Stack Overflow:http://stackoverflow.com/questions/12483711/serialdata-eof-circumstances