EV_RXCHAR 事件何时以及多久触发一次(来自 WaitCommEvent)?

When and how often does the EV_RXCHAR event fire (from WaitCommEvent)?

我一直在研究 .NET SerialPortSerialStream 类 的 reference sources,发现它们触发了 DataReceived事件等待 WaitCommEvent()

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

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

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

For example, if you specify the EV_RXCHAR event as a wait-satisfying event, a call to WaitCommEvent will be satisfied if there are characters in the driver's input buffer that have arrived since the last call to WaitCommEvent or SetCommMask.

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