我有一个带有一些标签的表单,在Visual C#
中此表单正在使用回调" serialPort1_DataReceived"
读取串口在其中一个标签中有一个名为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]);
}
}
由于
答案 0 :(得分: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]);
});
}
}