簡體   English   中英

檢查SerialPort.BytesToRead與在讀取循環中使用TimeoutException?

[英]Checking SerialPort.BytesToRead vs using TimeoutException in a read loop?

我有一個.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();
}

第二種方法肯定更好。 異常不應用於控制正常程序流。

此外,第一種方法確實會使您的調試體驗混亂,尤其是如果您將IDE設置為在每個拋出的異常時都中斷的話。

不讀端口,您有一個特殊功能:

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
     int n = serialPort1.BytesToRead;
     ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM