此文为收集类文章,并非一定为原创,手动将零碎代码、文字收集成一篇博文,感谢作者们的无私奉献!
问题代码:
private void Form1_Load(object sender, EventArgs e) { //多线程 AAA= new Thread(new ThreadStart(BBB)); AAA.Start(); }
//接收数据方法
public void BBB() { while (true) { IPEndPoint IpSender = new IPEndPoint(IPAddress.Any, 0); EndPoint tmpRemote = (EndPoint)IpSender; byte[] recive = new byte[1024]; try { int recv = bacnet_master_socket.ReceiveFrom(recive, ref tmpRemote); } catch (Exception efe) { label1.Text = efe.ToString(); } } }
问题:执行时显示“线程间操作无效: 从不是创建控件“label1”的线程访问它“异常
解决办法:
因为是在线程里操作主线程的控件,所以出错,你应该用委托
控件的invoke函数
操作实列请看
http://msdn.microsoft.com/zh-cn/library/zyzhdc6b(v=VS.80).aspx
private delegate void MyDelegateUI(); if (label1.InvokeRequired) { MyDelegateUI d = delegate { label1.Text = efe.ToString(); }; label1.Invoke(d); } else { label1.Text = efe.ToString(); }