【发布时间】:2019-05-27 11:57:47
【问题描述】:
我正在使用 C# 开发一个 Windows 窗体应用程序,其中我从串行端口接收数据,现在我有以下代码(这只是我的问题的相关代码):
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
ReceivedData = serialPort1.ReadExisting();
this.Invoke(new EventHandler(interp_string));
}
private void interp_string(object sender, EventArgs e)
{
textReceive.Text += ReceivedData + "\n";
}
但现在我需要将接收到的数据解析成小字符串。 ReceivedData 变量是具有以下格式的多个字符串的组合:“value time \n”,其中 value 从 0 到 1024,时间以秒为单位(并且总是增加),并且有 4 个小数位。我需要将 ReceivedData 变量拆分为单独的值,并在相应的时间将其绘制在图表中。考虑到使用 ReadExisting,可能会发生一个字符串仅被部分读取,其余的只会在下次触发 DataReceived 事件时读取,但我不介意丢失一点数据,并不重要。
我已经尝试使用 ReadLine 而不是 ReadExisting 并且我设法拆分每个字符串并绘制数据,但鉴于应用程序正在接收大量数据,每 1 毫秒一个字符串,应用程序无法跟上并且即使它已经过去了 10 秒,应用程序仍在从第 2 秒开始打印数据,我按下一个按钮以停止接收数据,应用程序长时间保持打印值,我认为这些值是存储在接收缓冲区中的值。更改为 ReadExisting 是我发现实时读取和打印所有内容的唯一方法。
【问题讨论】:
-
你走错了方向;在“每 1 毫秒一个字符串”尝试在 WinForms 文本字段中显示字符串是无用的,因为没有人可以读取它。您只需要存储您感兴趣的数据,并且只显示用户需要阅读的内容并丢弃其余的内容。
-
@DourHighArch 最终目标不是显示字符串并读取它,否则我不需要拆分字符串并识别值项及其对应的时间。我出于调试目的打印它。正如我在原始帖子中所说,最终目标是将它们绘制在图表中。
标签: c# winforms split serial-port string-parsing