private void sp2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {     
            readdata=sp2.BytesToRead;
            byte[] by = new byte[1024];
            sp2.Read(by, 0, by.Length);           
            try
            {
                textBox1.Text += readdata.ToString() + "。";
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }           
        }
出现错误:从不是创建控件“textBox1"的线程访问它。 
我想把接收到的信息显示在textBox控件上或其它控件上,

解决方案 »

  1.   

    使用invoke 或begininvoke进行委托访问
      

  2.   

    NET下线程开发图形界面同样要遵循一个基本原则:就是对UI对象的操作一定要在产生该UI对象的线程里进行(该线程称作UI线程),因为大部分UI对象都不是线程安全的。 
    在.NET中,把调用调用放在UI线程里执行是通过Form类及其子类的Invoke()方法实现的(具体的过程请参考其他资料),可以这样做是因为Form对象保存了创建它的线程的信息,而且Form类有一个bool类型的属性InvokeRequired,可以通过它查看当前线程是否为创建该Form对象的线程(UI线程)——如果为true,则表示当前线程不是UI线程,反之则是。
      

  3.   

    谢谢 dazhu2(边城浪子【倚天不出,谁与争锋】)