zoukankan      html  css  js  c++  java
  • 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;线程间操作无效,从不是创建控件**的线程访问它。”

  • 相关阅读:
    关于面向对象
    关于内存的划分和传引用传参数的区别
    关于目前我们专业的各种发展方向
    关于C语言底层
    关于游戏行业目前的形势
    关于jsp,javascript,php等语言
    鼠标滑动图片变大
    在Linux环境下mysql的root密码忘记解决方法
    百度网盘
    bootsrtap 主题元素
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/5077533.html
Copyright © 2011-2022 走看看