如何使用线程/后台工作者C#实现SerialPort?

时间:2010-08-06 06:53:13

标签: c# multithreading serial-port

我正在编写一个类来处理与外部设备的所有串行通信(即读写)。数据以20Hz流式传输到计算机,偶尔也会将数据写入设备。然后,该类将通过事件将有效数据输出到主UI。 我想把这个类放在一个单独的线程中,因为我之前的代码在设备中引起了一些“断断续续”,因为它在主UI线程中。

我只是不确定如何使用线程/后台工作程序构造和实现SerialPort类,因为我在这方面缺乏经验。

只有数据接收事件存在于线程/后台工作者中? 如何将数据传入和传出创建的线程/后台工作程序?

非常感谢任何提示或建议!

3 个答案:

答案 0 :(得分:1)

我的第一个提示是你应该把它想象成网络(Socket)通信。线程问题大致相同。通过他们拥有的MSDN文档(如果我没记错),有两种不同的方法,即异步和同步。我个人会使用其中一种异步方式。

您还可以查看新的任务库。

如果您还有其他问题,请继续查看并回来=)

同样来自带有线程example的msdn库串口,这是控制台,但无论如何。

答案 1 :(得分:0)

您只需在另一个线程中实现SerialPort的实际使用。当需要“通知”您的UI时,您可以使用“BeginInvoke”来获取在UI线程内运行的实际UI处理。

类似的东西:

string s = _port.ReadLine();

form.BeginInvoke((MethodInvoker)delegate
{
  _textbox.Text = s;
});

答案 2 :(得分:0)

只需使用DataReceived事件。