Serial port 处理COM串口通信

Serial port 处理COM串口通信,serial-port,interrupt-handling,Serial Port,Interrupt Handling,我正在考虑一种在我的程序中正确处理串行端口通信的最佳方法。我有一些设备向我发送数据,我使用DataReceived事件接收数据,并读取其中的现有方法。它读取的所有内容都放在缓冲区中,当最后一行等于某个字符串时,我开始将其解析为某种数据包 除此之外,当我向这个设备发送数据并等待响应时,我会标记这个标志 bool isReady = false; while(!isReady) Thread.Sleep(500); 在数据解析方法中,我将这个标志设置为true,这样当我接收到数据包数据时

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

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

bool isReady = false;

while(!isReady)
    Thread.Sleep(500);
在数据解析方法中,我将这个标志设置为true,这样当我接收到数据包数据时,代码就可以跳出这个循环并根据需要继续工作。但在我看来,这不是一个干净/好的方法。有时会出现问题,若设备不能发送我需要的数据包,那个么程序就永远卡在循环中

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


谢谢,很抱歉英语不好。

不要无休止地等待回复。使用前面提到的事件获取数据。看看这个问题吧

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

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

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

等待事件是处理设备本身调用的问题的一种很酷的方式。但是,当我向设备发送一个请求时,如何做到这一点,然后我需要等待响应,并依靠该响应发送其他请求等?我不能只是退出方法并等待事件。通过使用事件,您可以在保持与串行端口通信的同时维护响应应用程序。只需在父级或封装逻辑的类中维护状态(此实例中的最后一个操作/请求是什么)。考虑事件驱动,而不仅仅是单一方法。通过这种方式,您可以取消等等,因为您可以在MM中构建该逻辑,您可以发布一些伪代码或一些文章来向我展示它是什么样子的示例吗?我不知道如何做到这一点,事件驱动,并仍然保持适当的命令处理顺序。听起来你在使用DataReceived事件。别用,你没用。直接调用Read()。