繁体   English   中英

C#Visual Studio中的多线程并从连接到arduino的串行端口接收数据

[英]Multithreading in C# Visual Studio and receiving data from serialport connected to arduino

谁能告诉我我在做什么错? 我收到一条错误消息,说无法在线程上访问tbOutput?

我猜这是关于它没有安全执行的问题。 我该如何解决此错误?

    private void DataReceivedHandler(
                object sender,
                SerialDataReceivedEventArgs e)
    {
        this.demoThread = new Thread(new ThreadStart(this.ThreadProcSafe));

        this.demoThread.Start();

        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        tbOutput.Text = indata;
    }

    private void ThreadProcSafe()
    {
        this.SetText("Something happened correctly");
    }

    private void SetText(string text)
    {
        if (this.tbOutput.InvokeRequired)
        {
            SetTextCallBack d = new SetTextCallBack(SetText);
            this.Invoke(d, new object[] { text });
        }
        else
        {
            this.tbOutput.Text = text;
        }
    }

由于您的DataReceivedHandler是在非UI线程上调用的,因此您可能会收到错误。 如以下所述: https : //msdn.microsoft.com/zh-cn/library/system.io.ports.serialport.datareceivedv = vs.110) .aspx (“备注”部分)

如果使用的是.NET 4,则可以执行以下操作:

tbOutput.Text = indata

你应该做:

tbOutput.Invoke(new Action(() => tbOutput.Text = indata));

而且您不需要额外的线程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM