处理 COM 串行端口通信



我在考虑一种在程序中正确处理串行端口通信的最佳方法。我有一些设备向我发送数据,我使用其中的 DataRecieved 事件和 ReadExisting 方法接收它。它读取的所有内容都放在缓冲区中,当最后一行等于某个字符串时,我开始将其解析为某种数据包。

除此之外,当我将数据发送到此设备并等待响应时,我会标记标志

bool isReady = false;
while(!isReady)
    Thread.Sleep(500);

在数据解析方法中,我将此标志设置为 true,以便当我收到数据包数据时,代码可以跳出此循环并根据需要继续工作。但在我看来,这不是一个干净/好的方法。而且有时会出现问题,如果设备不会发送我需要的数据包,那么程序就会永远卡在循环中。

我想知道,你们将如何在代码中解决这种情况?

谢谢,很抱歉英语不好。

不要只是在无限循环中等待响应。使用前面提到的事件来获取数据。另请参阅其他SO问题。串行端口类和数据接收事件...获取字节。使用 ReadLine 还是 ReadExisting?有什么例子吗?

现在,

我使用以下代码添加了 5 秒超时:

bool isReady = false;
DateTime timeout = DateTime.Now;
while(!isReady)
{
    Thread.Sleep(500);
    if((DateTime.Now-timeout).TotalMiliseconds >= 5000)
        break;
}

因此,当没有收到响应时,它就会跳出这个循环。这正在解决我的一个问题,但我仍然想知道处理这个问题的其他方法。如果你们有任何想法,请分享。

最新更新