检查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();
}
第二种方法肯定更好异常不应用于控制正常程序流。
此外,第一种方法会让您的调试体验非常混乱,尤其是如果您将IDE设置为在每次抛出异常时都中断。
不要读取端口,你有一个特殊的功能:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
int n = serialPort1.BytesToRead;
...
}