SerialData.Eof情况在我的SerialPort.DataReceived事件处理程序中,我正在检查SerialData.Eof:voidDataReceived(objectsender,SerialDataReceivedEventArgse){if(e.EventType==SerialData.Eof)thrownewNotImplementedException("SerialData.Eof");//...Read}在我迄今为止的整个开发过程中,我从未遇到过这种异常。但今天它在处理不同的协议时受到了影响。我的问题是,SerialData.Eof到底是什么意思?MSDN说:接收到文件结束字符并将其放入输入缓冲区。我正在处理二进制数据。什么是“文件结束字符”?这篇MSDN论坛帖子说明DCB.EofChar成员始终初始化为0x1A(Ctrl+Z)在SerialStream类的参考源中,在第1343行,我们确实看到:dcb.EofChar=NativeMethods.EOFCHAR;在Microsoft.Win32.NativeMethods:internalconstbyteEOFCHAR=(byte)26;那么这是否意味着我的设备发送一个0x1A字节并且我将收到一个SerialData.Eof事件?如果是这种情况,我是否应该完全停止测试?我在MSDN帖子中的原始分析是正确的。但是,参考源显示了SerialStream.cs的答案:dcb.EofChar=NativeMethods.EOFCHAR;//旧MSCOMM:dcb.EvtChar=(byte)0;//现在改为使用RXFlagWaitCommEventevent=>EofWaitForCommEventeventdcb.EvtChar=NativeMethods.EOFCHAR;嗯,他们使用DCB的EvtChar设置来检测Ctrl+Z。这是一个非常糟糕的主意,因为没有办法改变它,而且0x1a字节值肯定会出现在二进制协议中。实际上,这几乎总是有一个好的结局,因为随着事件的展开会有一些东西可以阅读。但是,现在有一个竞争条件会触发另一个事件,这次是针对SerialData.Chars,并且自上次事件以来没有任何内容读取所有字节。这将使Read()调用阻塞,直到一个字节可用。这通常会修复它,但会增加Close()调用死锁的机会。慢性串行端口问题。正确处理该问题的方法是:以上就是C#学习教程:SerialData.Eof情况分享的全部内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——voidDataReceived(objectsender,SerialDataReceivedEventArgse){if(e.EventType==SerialData.Eof)return;//...阅读}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
