【发布时间】:2018-12-30 03:23:28
【问题描述】:
我使用 C# 开发了一个 Windows 窗体应用程序,它通过微控制器发送的串行端口接收数据。我正在使用 serialPort_DataReceived 事件接收数据,在该事件中我使用 ReadLine() 来读取串行端口。然后我使用 Invoke 方法调用一个函数,它将接收到的字符串打印到一个文本框中。问题是应用程序无法跟上它接收字符串的速率,例如,我从微控制器发送的字符串具有发送时间,即使它已经过了 2 或 3秒应用程序仍在打印在 0.2 秒时发送的字符串。当我向微控制器发送一个字符串以停止发送数据时,应用程序只会在一段时间后停止对数据进行着色,也就是说,它会继续打印存储在接收缓冲区中的值。
我相信,鉴于应用程序接收到的大量数据和速率(我使用的是 115200 的波特率),每毫秒一个字符串。也就是说,我认为应用程序总是被 DataReceived 事件打断,它没有时间打印数据并开始落后。
我想克服这个问题的一种方法是使用多线程,但我不知道如何解决。我已经尝试了一些使用 BackgroundWorker 的示例,但我根本没有让它工作。在编写 Windows 窗体应用程序甚至 C# 方面,我仍然是个菜鸟。
谁能确认问题的原因?以及如何创建一个线程来打印接收到的数据?
【问题讨论】:
标签: c# multithreading winforms serial-port backgroundworker