• C#回调实现的一般过程


    C#回调实现的一般过程

    C#的方法回调机制,是建立在委托基础之上的,下面给出它的典型实现过程。

    (一) 定义、声明回调

    Delegate void DoSomeCallBack(type para);

    DoSomeCallBack doSomeCallBack;

    可以看出,这里定义声明的“回调”(doSomeCallBack)其实就是一个委托。

    (二) 初始化回调方法

    doSomeCallBack=new DoSomeCallBack(DoSomeMethod);

    所谓“初始化回调方法”实际上就是实例化刚刚定义了的委托,这里作为参数的DoSomeMethod称为“回调方法”,它封装了对另一个线程中目标对象(窗体控件或其它类)的操作代码。

    (三) 触发对象动作

    Opt obj.Invoke(doSomeCallBack,arg);

    其中,Opt obj为目标操作对象,在此假设他是某控件,故调用其Invoke方法。Invoke方法的签名为:

    • object Control. Invoke(Delegate Method,params  object[] args)

    它的第一个参数为委托类型,可见“触发对象动作”的本质就是把委托doSomeCallBack作为参数传递给控件的Invoke方法,这与委托的使用方式是一模一样的。

    最终作用于对象Opt obj的代码是置于回调方法体DoSomeMethod()中的,如下所示:

    private void DoSomeMethod(type para)

    {

                Opt obj. someMethod(para);

    }

    如果不用回调,而是直接在程序中用“Opt obj. someMethod(para);”则当对象Opt obj不在本线程(夸线程访问)时就会发生如下所提示的错误:“Microsoft.VisualStudio.Debugger.Runtime.CrossThreadMessagingException”类型的异常或“System.InvalidOperationException;线程间操作无效,从不是创建控件**的线程访问它。”

  • 相关阅读:
    两种类型插件系统
    ArcEngine序列化IFeatureRenderer对象
    [WorldWind学习]14.ConfigurationLoader类
    [WorldWind学习]15.模型加载
    AE应用程序开发的思考
    [C++摘抄]void*
    XML文件读写学习
    EA正向工程
    Word2010利用公式编辑器实现公式“显示”“居中”公式编号右对齐
    [Qt]Hello Qt !
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/5077533.html
Copyright © 2020-2023  润新知