C# 中使用委托 解决 “线程间操作无效: 从不是创建控件“label1”的线程访问它” 问题

此文为收集类文章,并非一定为原创,手动将零碎代码、文字收集成一篇博文,感谢作者们的无私奉献!

问题代码:

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();
}