2013-02-01 39 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答案以获取更多信息。