2016-12-12 63 views
1

与许多人一样,我遇到DataReceived事件未触发的问题。C#强制SerialPort.DataReceived事件触发

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

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

通过阅读对类似问题的一些回答,我没有更接近地保证该活动将按照最低要求进行启动。 Microsoft mentions the issue with DataReceived不被保证触发为每个字节,但我这上面注意到:

如果接收到EOF字符,而不管字节在内部输入缓冲器的数量和值的DataReceived事件检索也上升ReceivedBytesThreshold属性。

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

如果我不能强制通过串行的EOF字符,我的选择是什么?我的第一个想法可能是创建一个任务来监视事件触发,如果它不触发,通过任务触发操作。

回答

0

所以我能够解决我的问题,出来一点聪明。

根据我的观察,ReadBytesThreshold在事件实际效果如何有效方面起着至关重要的作用。当阈值设置得太低时,串口有一种让自己感到困惑的倾向,最终会放弃并放弃。

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

我没有测试我关于使用任务的想法,但在线阅读似乎回答了我关于使用0x1A的问题:从我注意到的情况来看,如果它接收到这个字符(至少在Windows机器上) 。