此文为收集类文章,并非一定为原创,手动将零碎代码、文字收集成一篇博文,感谢作者们的无私奉献!
问题代码:
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();
}