Работая в Windows 10 с .NET 4.7.2 и виртуальными последовательными портами, у меня есть обработчик 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 и continue снова вызывается ReadByte()
, где он блокируется до истечения 10-секундного тайм-аута.Если я запишу больше данных в порт за это время, ReadByte()
не вернется немедленно.Вместо этого он продолжает блокироваться до тех пор, пока не истечет полный тайм-аут, и только затем возвращает вновь записанный байт.
Почему бы не вернуться, как только появятся новые данные?