在继续之前,我如何从串行端口读取所有数据?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();
}
有两种方法可以知道您是否获得了所有数据:
- 让发送方告诉你它要发送多少字节(或行),然后你读取,直到你收到那么多字节(或行)。
- 让发送方和接收方同意一些特定的文本作为消息的结尾。例如,发送方将发送一个空行,或者只包含"END"的行,或者Control-Z字符。表示消息结束的。
否则,你不可能知道发送者什么时候完成了。