我正在考虑在我的程序中正确处理串口通信的最佳方法。我有一些设备向我发送数据,即使用DataRecieved事件和ReadExisting方法将其恢复。它读取的所有内容都放在缓冲区中,当最后一行等于某个字符串时,我开始将其解析为某种数据包。
除此之外,当我向此设备发送数据并等待响应时,我标记了标记
bool isReady = false;
while(!isReady)
Thread.Sleep(500);
在数据解析方法中,我将此标志设置为true,因此当我收到数据包数据时,代码可以跳出此循环并继续按需工作。但在我看来,这不是一个干净/好的方法。并且有时会出现问题,如果设备不发送我需要的数据包,那么程序将永远停留在循环中。
我想知道,你们在代码中如何解决这个问题呢?
谢谢,抱歉英语不好。
答案 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;
}
因此,当没有收到任何响应时,它就会跳出这个循环。这是解决我的一个问题,但我仍然想知道其他方法来解决这个问题。如果你们有任何想法,请分享。