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

时间:2011-04-27 15:46:56

标签: 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());
}

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

由于

1 个答案:

答案 0 :(得分:8)

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