Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SerialPort(SerialDataReceivedEventArgs)System.InvalidOperationException_C#_Multithreading_Exception_Serial Port - Fatal编程技术网

C# SerialPort(SerialDataReceivedEventArgs)System.InvalidOperationException

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();

引发异常:中的“System.InvalidOperationException” WindowsBase.dll 其他信息: 不可能加入所有的奥格托·达尔·卡曼特 这是一个很好的例子


您可以使用委托在正确的线程中调用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;
    }
}