C#强制要触发SerialPort.DataReceived事件

时间:2016-12-12 08:20:33

标签: c#

与许多人一样,我遇到了DataReceived事件未触发的问题。

使用它之后,我将处理过程包装在BytesToRead计数之下,所以如果我错过了火,我可以从我离开的地方拿起。看起来它会解决我所有的问题。

问题是,有时它甚至不会触发一次。根据发回的数据包,这可能是绝对关键的,迫使我重新启动应用程序和设置过程,因为它依赖于能够处理响应。

阅读对类似问题的一些回答并没有让我更接近保证事件将以最低要求激发。 Microsoft mentions the issue with DataReceived不保证每个字节都会触发,但我注意到了上述情况:

  

如果收到Eof字符,也会引发DataReceived事件,无论内部输入缓冲区中的字节数和ReceivedBytesThreshold属性的值如何。

所以我的问题是,我可以通过串行连接强制EOF字符强制事件触发吗?这个角色是什么,0x1A?

如果我无法通过连续剧强制使用EOF角色,我的选择是什么?我的第一个想法是创建一个任务来监视事件触发,如果它没有触发,则通过任务触发操作。

1 个答案:

答案 0 :(得分:0)

所以我能够解决我的问题,更明智一点。

根据我的观察,ReadBytesThreshold在事件实际有效性方面起着关键作用。当阈值设置得太低时,串口容易混淆,最终会放弃并放弃。

将其设置为接近我预期数据的大小似乎有助于减轻负担,使阅读相当一致。

我没有测试我使用任务的想法,但是在线阅读似乎回答了我关于使用0x1A的问题:从我注意到的,如果它收到这个角色会触发(至少在Windows机器)。