• 跨线程更新主线程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;
                });
            }

    不需要定义委托,不需要定义委托的回调方法
  • 相关阅读:
    DBA操作规范
    MySQL高可用之MHA
    Get MySQL这5个优化技巧,你将如虎添翼
    数据库的那些事
    Kubernetes
    nginx错误分析 `104: Connection reset by peer`
    kubernets资源预留
    kubernetes Pod亲和性
    kubernetes cpu限制参数说明
    zabbix 面板graph图上没有数据显示
  • 原文地址:https://www.cnblogs.com/jintan/p/1583725.html
Copyright © 2020-2023  润新知