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

    不需要定义委托,不需要定义委托的回调方法
  • 相关阅读:
    OpenStack official programs
    在Oracle数据库启动时提示没有权限 ora-01031:insufficient privileges
    顶级工程师应该具备的能力
    Java Servelet
    Struts dispatchAction
    Struts html(标签)
    Java jstl标签使用总结
    Struts1原理解析
    Java Struts(文件下载)
    Java PrepareStatement
  • 原文地址:https://www.cnblogs.com/jintan/p/1583725.html
Copyright © 2011-2022 走看看