代码改变世界

Winform跨线程访问控件

2013-10-10 18:28  hduhans  阅读(164)  评论(0)    收藏  举报

  C#中禁止跨线程直接访问控件,使用InvokeRequired属性可以解决此问题。当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它。当被访问控件调用Invoke方法后,则InvokeRequired属性值为假,线程可以访问。可以通俗地理解为,有人想找你借钱,他可以直接在你的钱包中拿,这样太不安全,因此必须让别人先要告诉你,你再从自己的钱包把钱拿出来借给别人,这样就安全了。

  使用委托,参考代码如:

private void doFun(String txt) {
    if (textBox1.InvokeRequired) {
        doFunHandler handler = new doFunHandler(doFun);
        textBox1.Invoke(handler,new object[]{txt});
    } else {
        textBox1.Text = "测试文字";
    }
}

private delegate void doFunHandler(String txt);