2014-12-18 1 views
0

У меня есть форма с некоторыми вкладками, в Visual C#Cross-нить в DataReceived CallBack

Эта форма читает последовательный порт, используя функцию обратного вызова «serialPort1_DataReceived»

В одной из вкладок есть TextBox называется textBox_CN2

когда сериал подножка и я нажимаю на этой вкладке, у меня есть ошибка, когда форма попытаться изменить текст в текстовое поле

операции кросс-нить не действует: «textBox_CN2» Control доступны из нить другая чем поток, на котором он был создан.

Это упрощенная версия кода:

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() для обновления пользовательского интерфейса, как это:

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]); 
      }); 
     } 

    } 
Смежные вопросы