如果调用数据后到达.NET SerialPort ReadByte()为什么会阻塞整个超时?

时间:2019-02-04 02:08:50

标签: c# .net serial-port timeout

在具有.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()不会立即返回。取而代之的是,它将继续阻塞直到整个超时时间过去,然后才返回新写入的字节。

为什么一旦有新数据就不会返回?

0 个答案:

没有答案