检查SerialPort.BytesToRead与在读取循环中使用TimeoutException

本文关键字:TimeoutException 循环 读取 SerialPort BytesToRead 检查 | 更新日期: 2023-09-27 17:59:57

我有一个.NET C#类,它使用System.IO.Ports.SerialPort进行串行端口通信。它包括一个线程,该线程在循环中连续读取串行端口。

我一直认为将Exceptions作为正常程序流的一部分是不好的,但在网上搜索时,我看到了许多使用阻塞Read和TimeoutException来等待传入数据的例子,比如:

while (true)
{
    try
    {
        serialPort.Read(buffer, offset, count);
        /* Processing code here */
    }
    catch (TimeoutException)
    { }
}

在发布Read之前检查SerialPort.BytesToRead()不是更好吗,就像本例中的

while (true)
{
    if (serialPort.BytesToRead() <= 0)
    {
        /* Wait for event signal or similar. */
    }
    serialPort.Read(buffer, offset, count);
    ProcessData();
}

检查SerialPort.BytesToRead与在读取循环中使用TimeoutException

第二种方法肯定更好异常不应用于控制正常程序流。

此外,第一种方法会让您的调试体验非常混乱,尤其是如果您将IDE设置为在每次抛出异常时都中断。

不要读取端口,你有一个特殊的功能:

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
     int n = serialPort1.BytesToRead;
     ...
}
相关文章:
  • 没有找到相关文章