2014-12-18 146 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]); 
      }); 
     } 

    }