2012-01-11 43 views
0

我有一个串口连接到我想定期监控的频率为1到1/10Hz(尚未决定)的设备。异步串行通信线程选项

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

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

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

回答

1

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

+0

谢谢。最棒的! – kasperhj 2012-01-12 09:45:49