private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
              textBox1.text=textBox1.text + serialPort1.ReadExisting ();
            
   
        }出错信息是   线程间操作无效: 从不是创建控件“textBox1”的线程访问它。我应该怎么办呢

解决方案 »

  1.   

    如果试图访问控件的方法或属性之一的线程不是创建该控件的线程,则通常会导致不可预知的结果。通常,无效的线程活动是对访问控件的 Handle 属性的错误线程的调用。在线程的函数或者过程中  加上   CheckForIllegalCrossThreadCalls = False  就可以了!
      

  2.   

    加上   CheckForIllegalCrossThreadCalls = False 会不会产生不好的结果呢?
    invoke具体是怎么使用的呢?
      

  3.   

    不是创建的线程访问只要保证只读不写或者保证线程同步,用lock
      

  4.   

    线程是不可以控制控件的,但可以通过invoke
      

  5.   

    private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {                string s = sp.ReadExisting(); // sp是串口控件名
                    ShowText(s);        }        private void ShowText(string msg)
            {
                this.Invoke(new EventHandler(delegate 
                {                 txtShow.Text = msg;             }
                )
                );
            }