2010-08-06 85 views
1

我在寫一個能夠處理與外部設備(即讀寫)的所有串行通信的類。數據以20Hz傳輸到計算機,偶爾也會將數據寫入設備。然後,該類將通過事件將有效數據輸出到主UI。 我想把這個類放在一個單獨的線程中,因爲我之前的代碼在設備中導致了一些'口吃',因爲它在主UI線程中。如何使用線程/後臺工作者C#實現SerialPort?

我只是不確定如何使用線程/後臺工作器來構造和實現SerialPort類,因爲我在這方面沒有經驗。

只有數據接收事件存在於線程/後臺工作者內部嗎? 如何將數據傳入和傳出創建的線程/後臺工作者?

任何提示或建議將不勝感激!

回答

1

我的第一個技巧是,你應該把它想它是網絡(插座)通信。線程問題大致相同。通過他們所擁有的MSDN文檔(如果我沒有記錯的話)通過兩種不同的方式進行異步和同步。我個人會使用其中一種異步方式。

你也可以看看新的任務庫。

開始尋找到該回來,如果你還有其他問題,=)

從MSDN庫串口

還與線程example這是安慰,但無論如何。

+0

我做了一些關於msdn網站的進一步調查,並且我讀到DataReceieved事件是在單獨的線程上創建的。那麼這是否意味着事件處理程序中處理的內容已經在單獨的線程中?那麼我試圖做多餘? – steeppham 2010-08-08 07:37:28

+0

嗯,是的,我想這是... =)只要確保你使用BackgroundWorker或類似的東西的UI,所以你不要「掛」用戶界面,這是你需要使用線程的地方。所以整個串行端口的處理都在一個線程中,在你使用的事件中。 – 2010-08-11 09:40:39

0

您只是在另一個線程中實現SerialPort的實際使用。當需要「通知」你的UI的時候,你可以使用「BeginInvoke」來獲得在UI線程中運行的實際的UI處理。

喜歡的東西:

string s = _port.ReadLine(); 

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

只需使用DataReceived事件。