SerialPort是否在自己的线程上接收数据?

Jay*_*Pea 3 c# multithreading serial-port

假设我们有以下代码:

SerialPort port = new SerialPort("COM2", 115200); 
port.Open();
//
Thread.Sleep(5000);
//
if (port.BytesToRead > 0)
{
   Console.WriteLine("Bytes in buffer: " + port.BytesToRead.ToString());
}
Run Code Online (Sandbox Code Playgroud)

如果在线程被阻塞的5000毫秒期间,5个字节被发送到串口,那么代码会打印出缓冲区中有5个字节吗?或者在Thread.Sleep返回之前它不会开始接收?

谢谢

Kei*_*thS 8

硬件设备(例如HDD,网络端口和是,串行端口)上的通信使用由ThreadPool管理的I/O完成线程来执行.因此,对您的问题的简短回答是,即使您的程序没有正在运行并且正在监听它,也应该由端口接收数据.一旦你的线程被唤醒,它将询问端口缓冲区中有多少字节,它会在你睡眠线程之前回复说它还有5个字节.