在继续之前,我如何从串行端口读取所有数据?c#

本文关键字:读取 串行端口 数据 继续 | 更新日期: 2023-09-27 18:18:09

我有这个从serialPort读取数据的应用程序。serialPort根据发送给它的命令使用不同的响应进行响应。当我发送一个特定的命令时,我可能需要回读几百行文本。到目前为止,我只能读取尽可能多的行,可以在我的thread.sleep.

我使用thread.sleep(500)来确保命令响应已完全输出&阅读。但是我从serialPort读取的数据随着每次执行而变大,所以休眠将不起作用。

我四处寻找,试图找到正确的方法来做这件事,但我似乎找不到。

public void sendCommandToPort(string command)
    {
        try
        {                
            serialPort1.Write(command);
            serialPort1.Write("'r'n");
        }
        catch (UnauthorizedAccessException ex)
        {
            MessageBox.Show(ex.Message);
        }
        System.Threading.Thread.Sleep(500); 
    }

private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {           
        SerialPort sp = (SerialPort)sender;
        readInData += sp.ReadExisting();
    }

在继续之前,我如何从串行端口读取所有数据?c#

有两种方法可以知道您是否获得了所有数据:

  1. 让发送方告诉你它要发送多少字节(或行),然后你读取,直到你收到那么多字节(或行)。
  2. 让发送方和接收方同意一些特定的文本作为消息的结尾。例如,发送方将发送一个空行,或者只包含"END"的行,或者Control-Z字符。表示消息结束的

否则,你不可能知道发送者什么时候完成了。