跨线程操作UI控件,相信大家经常会碰到,对于新手来说,总是会碰到麻烦,不知道如何使用子线程操作UI控件,因为.NET的安全机制,是不允许使用子线程操作UI控件的,只能由主线程操作。
子线程对UI控件的操作,需要通过委托来实现。举一个简单的例子,比如要给一个label控件赋值。
正常操作只需要
private void OperateUIControls()
{
label1.Text = "给label赋值";
}
如果使用子线程调用此方法,就会抛出异常“线程间操作无效: 从不是创建控件“label1”的线程访问它”
我们只需要使用委托稍作处理,就解决了
private void OperateUIControls()
{
if (label1.InvokeRequired)
{//判断是否跨线程操作
//新建一个委托,通过委托实现跨线程操作UI控件,MethodInvoker是.NET自带的委托
//大家也可以根据需要,自定义自己的委托类型已经需要的参数
MethodInvoker mi = new MethodInvoker(OperateUIControls);
this.Invoke(mi);
}
else
{
label1.Text = "给label赋值";
}
}
1 条评论。