C#技术总结:跨线程操作UI控件

跨线程操作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 条评论。

发表评论


Trackbacks and Pingbacks: