C# SerialPort(SerialDataReceivedEventArgs)System.InvalidOperationException
引发异常:中的“System.InvalidOperationException” WindowsBase.dll 其他信息: 不可能加入所有的奥格托·达尔·卡曼特 这是一个很好的例子C# SerialPort(SerialDataReceivedEventArgs)System.InvalidOperationException,c#,multithreading,exception,serial-port,C#,Multithreading,Exception,Serial Port,引发异常:中的“System.InvalidOperationException” WindowsBase.dll 其他信息: 不可能加入所有的奥格托·达尔·卡曼特 这是一个很好的例子 您可以使用委托在正确的线程中调用GUI。我会这样做: void scanBarcode(object sender, SerialDataReceivedEventArgs e) { string indata = _serialPort.ReadExisting();
您可以使用委托在正确的线程中调用GUI。我会这样做:
void scanBarcode(object sender, SerialDataReceivedEventArgs e)
{
string indata = _serialPort.ReadExisting();
this.Invoke((MethodInvoker)delegate
{
textbox1.Text = indata;
}
}
查看SerialDataReceiveDevenHandler类,当从SerialPort对象接收数据时,在辅助线程上引发DataReceived事件。由于此事件是在次线程而不是主线程上引发的,因此尝试修改主线程中的某些元素(如UI元素)可能引发线程异常。您需要参考上面关于如何从单独的线程更新GUI的评论。
void scanBarcode(object sender, SerialDataReceivedEventArgs e)
{
string indata = _serialPort.ReadExisting();
this.Invoke((MethodInvoker)delegate
{
textbox1.Text = indata;
}
}