繁体   English   中英

运行20秒后交叉线程

[英]Cross Thread after 20 seconds running

我从串口接收数据,并以多行文本框中的格式显示所有收到的数据。 这是我的串口监视器“txtOutput”。 在我将数据验证为完整消息并过滤掉几个字符(在单独的类中)之后,我需要将这些数据显示到其他文本框(textBox7,2和6)。 出于某些原因,我无法理解,经过10到20秒的调试,连续消息(200-300毫秒),我得到一个跨线程错误,“跨线程操作无效:控制从一个访问除了在“创建的线程之外的线程”。

这是我的代码:

串口读取

 private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            try
            {
                SetText(serialPort1.ReadExisting());
            }
            catch (Exception ex)
            {
                SetText(ex.ToString());
            }
        }

委托SetText

delegate void SetTextCallback(string text);

接收串口数据并详细说明

  private void SetText(string text)
        {
            if (this.txtOutput.InvokeRequired)
            {
             SetTextCallback d = new SetTextCallback(SetText);
             this.BeginInvoke(d, new object[] { text });
            }
            else
            {
               txtOutput.AppendText(text);
            }
               string a="", b="", c="";
                    string invia = text.ToString();
                    Stripper strp = new Stripper();
                    strp.Distri(invia, out a, out b, out c);
                    textBox7.Text = a; // Current
                    textBox2.Text = b; //Temperature
                    textBox6.Text = c; //RPM
               }
           }

这是我的第一个应用程序之一。 我需要更改什么以避免交叉线程错误以及我犯的错误在哪里?

您有一些代码可以更改受InvokeRequired保护的部分之外的UI元素。 所有文本框也需要保护。

尝试这个:

private void SetText(string text)
{
    if (this.txtOutput.InvokeRequired)
    {
        SetTextCallback d = new SetTextCallback(SetText);
        this.BeginInvoke(d, new object[] { text });
    }
    else
    {
        txtOutput.AppendText(text);
        string a="", b="", c="";
        string invia = text.ToString();
        Stripper strp = new Stripper();
        strp.Distri(invia, out a, out b, out c);
        textBox7.Text = a; // Current
        textBox2.Text = b; //Temperature
        textBox6.Text = c; //RPM
    }
}           

暂无
暂无

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

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