C#Windows窗体-串行端口问题/ BackgroundWorker

时间:2018-12-29 18:41:24

标签: c# multithreading winforms serial-port backgroundworker

我使用C#开发了Windows窗体应用程序,该应用程序通过微控制器发送的串行端口接收数据。我正在使用serialPort_DataReceived事件接收数据,在该事件中,我使用ReadLine()来读取串行端口。然后,我使用Invoke方法调用一个函数,该函数会将接收到的字符串打印到textBox中。问题是应用程序无法跟上接收字符串的速度,例如,我从微控制器发送的字符串具有发送时间,即使它已经通过了2或3秒后,应用程序仍会打印在0.2秒发送的字符串。而且,当我向微控制器发送字符串以停止发送数据时,该应用程序仅会在一段时间后停止打印数据,也就是说,它将继续打印存储在接收缓冲区中的值。

我认为,考虑到应用接收的大量数据和速率(我使用的波特率为115200),即每毫秒发送一个字符串,这种情况就会发生。这是因为,我认为该应用程序始终被DataReceived事件中断,并且它没有时间打印数据并开始落后。

我克服这个问题的一种方法是使用多线程,但我不知道如何解决。我已经使用BackgroundWorker尝试了一些示例,但是我根本没有使其工作。就Windows Form应用程序甚至C#而言,我还是一个菜鸟。

任何人都可以确认问题原因吗?以及如何使线程打印接收到的数据?

1 个答案:

答案 0 :(得分:0)

您可以利用SerialPort.ReceivedBytesThreshold属性和SerialPort.ReadExisting()方法(或StringBuilder实例)来一次用一批字符串而不是单个字符串更新UI。

有关更多信息,请检查: