zoukankan      html  css  js  c++  java
  • Invoke和BeginInvoke 在Winform 中更新控件的用法说明

    WPF 程序出现:

    参数计数不匹配,未处理System.Reflection.TargetParameterCountException
    解决方法引用http://www.cnblogs.com/wene/p/4668830.html
    根据调试的实际情况显示,委托出现问题,此异常是在使用Invoke调用时,没有正确匹配参数数量,因为Invoke或BeginInvoke方法的参数数量是可变的,所以在编译阶段根本不会出现编译错误,但在程序正式执行时,又要求目标调用方法与Delegate的方法定义必须一致,如不一致,则会出现如上异常信息。
    最后检查的确是委托参数传入个数不对!!!
     
     
    WPF 委托用法:
    在DelegateState类声明
    public delegate void ChartCallBack(object cht, List data);
    public static ChartCallBack ChtInfo;
     
    在调用地方:
    1.初始化:DelegateState.ChtInfo = chtShow;
     
    2.编写函数实体:private void chtShow(object ch, List data)
            {
                Chart cht = ch as Chart;
     
                this.Dispatcher.Invoke(new DelegateState.ChartCallBack(delegate
                {
                    //函数实现在这
                    }
                }), new object[] { ch, data});
            }
    3.要用的地方调用:DelegateState.ChtInfo ((object)chart, (List)data);
    需要注意的地方:WFP 里面委托调用时,控件只能以object形式传进去,所以先强制转换为object,然后在委托函数实体部分再强制转换为所需要的控件。
     
    Winform 委托方法:
    声明一致,在调用方面有不同。
    在调用地方:
    1.初始化:DelegateState.ChtInfo = chtShow;
     
    2.编写函数实体:
            void chtShow(object chart ,List data)
            {
                
                    this.Invoke(new ThreadStart(delegate
                    {
                       //函数实现在这
                        }
                    }));
    或者下面一种写法也是可以的
    this.Invoke(new DelegateState.ChartCallBack(delegate
                {
                    //函数实现在这
                    }
                }), new object[] { ch, data});
            }
    3.要用的地方调用:DelegateState.ChtInfo ((object)chart, (List)data);
    在winform里面用的是 this.Invoke,而WPF是 this.Dispatcher.Invoke,调用传入参数可以直接是控件
  • 相关阅读:
    爬取B站up主相册原图
    爬MEIZITU网站上的图片
    mpvue
    修改Tomcat控制台标题
    iserver频繁崩溃、内存溢出事故解决小记
    Java反射机制详解 及 Method.invoke解释
    window下maven的环境搭建
    window下mongodb的安装和环境搭建
    centos7 安装 redis4.0.8
    centos7 安装mysql5.7.20(yum方式)
  • 原文地址:https://www.cnblogs.com/JianGuoWan/p/9148129.html
Copyright © 2011-2022 走看看