【问题标题】:When and how often does the EV_RXCHAR event fire (from WaitCommEvent)?EV_RXCHAR 事件何时以及多久触发一次(来自 WaitCommEvent)?
【发布时间】:2015-06-03 19:26:52
【问题描述】:

我一直在挖掘 .NET SerialPortSerialStream 类的 reference sources,发现它们通过等待 WaitCommEvent() 来触发 DataReceived 事件。

当串行端口接收到一定数量的数据时,该事件通常只触发一次。通常当事件触发时,传输已经完成:我只需要读取一次即可获取所有数据。但是,有时事件在收到所有数据之前就结束了。在这种情况下,该事件将再次触发,然后我可以读取其余数据。

这让我想到了一个问题:EV_RXCHAR 事件究竟是什么时候触发的?接收到第一个数据字节后立即?收到数据后,过了一段时间没有收到更多数据?

【问题讨论】:

    标签: c# .net winapi events serial-port


    【解决方案1】:

    Communications Events 的 MSDN 页面中有更详细的解释:

    例如,如果您将 EV_RXCHAR 事件指定为满足等待 事件,如果有,将满足对 WaitCommEvent 的调用 驱动程序输入缓冲区中自 最后一次调用 WaitCommEvent 或 SetCommMask。

    所以EV_RXCHAR 会在一个或多个字符到达时触发。如果您不读取这些字节而是立即再次调用WaitCommEvent,它不会再次触发,直到更多(新)字符到达。

    【讨论】:

      猜你喜欢
      • 2018-02-26
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多