异步串行通信线程选项

时间:2012-01-11 11:45:56

标签: c#

我有一个串口连接到我想定期监听的设备,频率为1到1/10赫兹(尚未决定)。

我希望通信是非阻塞的,因此我决定将通信放在某种线程中,让主应用程序通过从线程触发的事件来接收数据。

我正在考虑在应用程序启动时创建一个持续发送和接收数据的线程。线程清空包含要发送到设备的命令的队列,然后在响应完成时侦听触发事件的响应。 当队列中没有命令时,线程将进入休眠状态,并在命令进入队列时唤醒。

这是一个很好的方法吗? 我正在考虑使用框架的一些已建立的功能,比如BackgroundWorker或Task,因为这些功能可能比我正在做的更有优势。 也许有其他更好的方法来实现这个目标?

2 个答案:

答案 0 :(得分:1)

这种情况不足以证明像Flat这样昂贵的资源。请改用System.Timers.Timer或System.Threading.Timer(更好)。在回调中编写设备查询命令。使用SerialPort.DataReceived事件接收响应并触发事件。现在一切都在廉价的线程池线程上运行。

答案 1 :(得分:0)