0

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

我一直认为在正常程序流程中使用异常是不好的,但是在网上搜索我看到很多使用阻塞读取和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();
}
4

2 回答 2

1

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

此外,第一种方法确实会扰乱您的调试体验,特别是如果您将 IDE 设置为在每次抛出异常时中断。

于 2013-02-18T10:23:13.137 回答
-1

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

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
     int n = serialPort1.BytesToRead;
     ...
}
于 2015-10-18T13:54:53.930 回答