2012-01-11 66 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