zoukankan      html  css  js  c++  java
  • 跨线程更新主线程UI控件最简单的写法

       在开发多线程程序时,通常非UI线程中需要操作主线程中的控件,此时如果直接调用控件的属性有可能会出错,需要调用控件的Invoke方法。
    Invoke方法的原型:
    public object Invoke(Delegate method,params object[] args)
    通常的使用方法是:先定义一个委托,
    public delegate void UpdateUIDelegate(object p1,object p2)
    void UpdateUIMethod(object p1, object p2)
    {
      
    controlXXX.Text = p1 + p2;
    }
    //非UI线程的方法内
    void WorkThreadMethod()
    {
        UpdateUIDelegate update 
    = new UpdateUIDelegate(UpdateUIMethod);
        controlXXX.Invoke(update, p1, p2);
    }
    p1,p2是传入的参数。

    另一种写法:
    利用匿名方法,或者lambda表达式的写法,看起来更简洁的:
            //非UI线程的方法内
            void WorkThreadMethod()
            {
                controlXXX.Invoke((MethodInvoker)
    delegate()
                {
                    controlXXX.Text 
    = p1 + p2;
                });
            }

    不需要定义委托,不需要定义委托的回调方法
  • 相关阅读:
    zznuoj 2173 春天的英雄梦
    zznuoj 2171: 春天的致富梦
    zznuoj 2169: 春天的打水梦
    zznuoj 2168 大家好 我是水题
    西安赛打铁队检讨书
    B-number HDU
    Bomb HDU
    CodeForces
    1140
    Frequent Subsets Problem
  • 原文地址:https://www.cnblogs.com/jintan/p/1583725.html
Copyright © 2011-2022 走看看