异步串行通信线程选项

本文关键字:线程 选项 通信线 通信 异步 | 更新日期: 2023-09-27 18:20:04

我有一个串行连接到一个设备,我想以1到1/10 Hz的频率定期监测该设备(尚未决定)。

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

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

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

异步串行通信线程选项

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

我找到了http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/e36193cd-a708-42b3-86b7-adff82b19e5e/这进一步解释了SerialPort的体系结构。