连续读取串行数据到文本框

时间:2014-01-13 01:51:40

标签: c# serial-port

我有以下C#程序,其中包含一个名为 GetForceButton 的按钮和一个名为 ForceTextbox 的多行文本框。这是我目前的代码:

public Form1()
{
   InitializeComponent();
   System.ComponentModel.IContainer components = new System.ComponentModel.Container();
   serialPort1 = new System.IO.Ports.SerialPort(components);
   serialPort1.PortName = "COM7";
   serialPort1.BaudRate = 9600;
   serialPort1.DtrEnable = true;
   serialPort1.Open();
   serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}

bool buttonpressed = false;

public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
   SerialPort sp = (SerialPort)sender;
   string indata = sp.ReadLine();
   if (buttonpressed == true)
   {
      ForceTextbox.Text = indata + "\n";
   }
   else
   {
      ForceTextbox.Text = "No data received";
   }
}

private void GetForceButton_Click(object sender, EventArgs e)
{
   buttonpressed = true;
}

当我单步执行代码时, indata “0.00 \ r”的serialPort中获取值(包括语音括号)。

在步入 ForceTextbox.Text = indata +“\ n”; 行后,正在抛出异常说:

System.Windows.Forms.dll中发生了未处理的“System.InvalidOperationException”类型异常。附加信息:跨线程操作无效:控制从其创建的线程以外的线程访问的“ForceTextbox”。

这是什么意思,或者我做错了什么?

1 个答案:

答案 0 :(得分:1)

您需要阅读this link

您需要确保在启动它们的同一线程上更新GUI组件。大多数情况下,这是由GUI线程完成的。

您将使用该链接中显示的InvokeRequired

不幸的是,你必须在C#中这样做。 来自Microsoft的One other tutorial