我有一个.NET C#类,它使用System.IO.Ports.SerialPort
进行串口通信。它包括一个在循环中连续读取串行端口的线程。
我一直认为使用Exceptions作为正常程序流程的一部分很糟糕,但是在网上搜索我看到很多使用阻塞Read和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();
}
答案 0 :(得分:1)
第二种方法肯定更好。 异常不应用于控制正常程序流程。
此外,第一种方法会使您的调试体验变得混乱,特别是如果您将IDE设置为在每个抛出的异常中中断。
答案 1 :(得分:-1)
不要读端口,你有一个特殊的功能:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
int n = serialPort1.BytesToRead;
...
}