2013-02-01 37 views
0

我發送和從使用 C#(串行通信)的裝置接收數據寫入。 對於接受我的設置是這樣的。 我接收在單獨的線程,即我有這樣的事情C#:串行數據從讀出線程

comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived); 

private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    ..... 
} 

要寫入我按下一個按鈕,其將數據寫入到該設備。

現在我想在我從設備收到一些數據時自動寫入數據,而不是在我接收數據時按下按鈕 。所以我的q是可以我把 comPort.WriteLine(textBox1.Text + "\r\n");

private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e) 

功能體。當我在這裏寫下它停止工作。否則,像我上面提到的那樣,使用單獨的按鈕進行書寫。

有人能告訴我什麼是正確的方法。有線程的任何問題或成才

謝謝!

+2

訪問'從一個線程是不是主/ UI線程textBox1.Text'是你的問題... – Yahia

+0

感謝您的答覆的原因。你是對的 !它解決了問題 – user1903439

+0

但是我怎樣才能在讀線程中使用教科書的輸入?我的意思是這個代碼comPort.WriteLine(textBox1.Text +「\ r \ n」); – user1903439

回答

0

與UI控件(包括像Text讀取和寫入性能)的任何操作應在應用程序的主線程來完成。如果你是在另一個線程,你應該使用Invoke方法的運做:

var text = (string)textBox1.Invoke(new Func<string>(() => 
    { 
     return textBox1.Text; 
    })); 
comPort.WriteLine(text + "\r\n"); 

this答案以獲取更多信息。