用C#写串口通信的时候遇到一个问题,奇怪的是我并没有用线程。其中receive是存放接收数据的文本框。
我直接将接收到的数据存放到receive这个文本框里,然后就报出了这个错误。
private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] ReDatas = new byte[comDevice.BytesToRead];
comDevice.Read(ReDatas, 0, ReDatas.Length);//读取数据
this.receive.Text = System.Text.Encoding.Default.GetString(ReDatas);
}
网上查过之后,知道是跨线程调用控件的问题。
解决方法:
1.线程开始的时候加一行代码:
Control.CheckForIllegalCrossThreadCalls = false;
这个方法比较简单,但是只是将错误提示禁用了,但跨线程调用控件的问题并没有解决。
2.使用委托,判断一下控件的InvokeRequired的属性,如果是true的话,进行invoke操作。
private delegate void ShowDelegate(string strshow);
public void Show(string strshow)
{
if (this.receive.InvokeRequired)
{
// this.txtreceive.BeginInvok