我一直在挖掘reference sources for .NET SerialPort
和SerialStream
类,并发现他们通过等待发起他们的DataReceived
事件WaitCommEvent()
。
当串口收到一些数据时,事件通常只触发一次。通常当事件触发时,传输已完成:我只需读取一次即可获取所有数据。但是,有时事件在收到所有数据之前结束。在这种情况下,事件将再次触发,然后我可以读取其余的数据。
这引出了一个问题:EV_RXCHAR
事件到底发生了什么?收到第一个数据字节后立即?收到数据并且已经过了一段时间而没有再收到数据?
答案 0 :(得分:1)
在Communications Events上的MSDN页面中对此进行了详细说明:
例如,如果将EV_RXCHAR事件指定为等待满足 如果存在,将满足对WaitCommEvent的调用 驱动程序输入缓冲区中的字符自从到达以来已到达 最后调用WaitCommEvent或SetCommMask。
当一个或多个角色到达时,class B:public A
{
int z;
public :
B(const int &x,const int &y,const int &thez):A(x,y), z(thez)
{
//modifications to z
x +=z;
y +=z;
}
};
将会触发。如果您没有读取这些字节,而是立即再次呼叫EV_RXCHAR
,则在更多(新)字符到达之前,它不会再次触发。