在具有.NET 4.7.2和虚拟串行端口的Windows 10上运行,我有一个SerialPort
DataReceived
处理程序,看起来像:
private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
_serialPort.ReadTimeout = 10000;
while (true)
{
try
{
var nextByte = _serialPort.ReadByte();
Debug.WriteLine(((byte)nextByte).ToString("X2"));
continue;
}
catch (TimeoutException)
{
}
break;
}
}
如果我向端口写入一个字节,它将立即出现在调试窗口中,并且由于while循环并继续,ReadByte()
被再次调用,它将阻塞直到10秒钟超时为止。如果在此期间将更多数据写入端口,则ReadByte()
不会立即返回。取而代之的是,它将继续阻塞直到整个超时时间过去,然后才返回新写入的字节。
为什么一旦有新数据就不会返回?