[英]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.