日期:2014-05-19  浏览次数:20773 次

关键词:线程,串口。知道的人帮我看下
private   void   serialPort1_DataReceived(object   sender,   System.IO.Ports.SerialDataReceivedEventArgs   e)
                {
                            textBox1.text=textBox1.text   +   serialPort1.ReadExisting   ();
                       
     
                }

出错信息是       线程间操作无效:   从不是创建控件“textBox1”的线程访问它。

我应该怎么办呢

------解决方案--------------------
如果试图访问控件的方法或属性之一的线程不是创建该控件的线程,则通常会导致不可预知的结果。通常,无效的线程活动是对访问控件的 Handle 属性的错误线程的调用。

在线程的函数或者过程中 加上 CheckForIllegalCrossThreadCalls = False 就可以了!
------解决方案--------------------
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;

}
)
);
}