处理COM串口通信

时间:2014-02-18 21:23:33

标签: serial-port interrupt-handling

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

除此之外,当我向此设备发送数据并等待响应时,我标记了标记

bool isReady = false;

while(!isReady)
    Thread.Sleep(500);

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

我想知道,你们在代码中如何解决这个问题呢?

谢谢,抱歉英语不好。

2 个答案:

答案 0 :(得分:0)

不要只是在无限循环中等待响应。使用您之前提到的事件来获取数据。另见其他问题。 SerialPort class and DataReceived event... Getting bytes. Use ReadLine or ReadExisting? Any examples?

答案 1 :(得分:-1)

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

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

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