У меня есть класс .NET С#, который использует System.IO.Ports.SerialPort
для связи через последовательный порт. Он включает в себя поток, который непрерывно читает последовательный порт в цикле.
Я всегда думал, что использование исключений как части нормального выполнения программы — это плохо, но, просматривая веб-страницы, я вижу много примеров использования блокировки чтения и TimeoutException
для ожидания входящих данных, например:
while (true)
{
try
{
serialPort.Read(buffer, offset, count);
/* Processing code here */
}
catch (TimeoutException)
{ }
}
Не лучше ли проверить SerialPort.BytesToRead()
перед выдачей Read
, как в этом примере:
while (true)
{
if (serialPort.BytesToRead() <= 0)
{
/* Wait for event signal or similar. */
}
serialPort.Read(buffer, offset, count);
ProcessData();
}