2014-12-18 109 views
0

我有一些选项卡的形式,在Visual C#跨线程操作

这种形式使用回调读取串口“serialPort1_DataReceived”

在一个选项卡中有一个textBox中称为textBox_CN2

当串行的乳宁和我点击此选项卡上,我有一个错误时,形式尝试改变在文本框中的文本

跨线程操作无效:控制“textBox_CN2”从访问一个线程其他而不是它创建的线程。

这是代码的简化版本:

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
    { 

     buffer_in[count] = (char)serialPort1.ReadByte(); 
     count++; 

     if (count > 10 && buffer_in[count - 1] == '#' && buffer_in[count - 2] == '@') 
      { 
       this.textBox_CN2.Text = string.Format("{0:F2}", buffer_in[2]); 
      } 

    } 

感谢

回答

1

使用Invoke()更新这样的UI:

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
    { 
     int count = 0; 
     char[] buffer_in; 

     buffer_in[count] = (char)serialPort1.ReadByte(); 
     count++; 

     if (count > 10 && buffer_in[count - 1] == '#' && buffer_in[count - 2] == '@') 
     { 
      this.Invoke((MethodInvoker)delegate 
      { 
       this.textBox_CN2.Text = string.Format("{0:F2}", buffer_in[2]); 
      }); 
     } 

    }