C# 委托的回调机制

1.什么是回调函数

回调函数(callbackFunction),顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。

2.C#回调函数实现机制

⑴定义一个回调函数;

⑵提供函数实现的一方在初始化的时候,将回调函数的实现函数委托给调用者;

⑶当特定的事件或条件发生的时候,调用者使用委托调用回调函数对事件进行处理。

3. 回调机制应用

使用回调机制,可以为工作流实现扩展。 可以把工作流中需要用户干预的,或需要提供给用户的数据以回调的模式提供给用户。而用户不需要知道整个工作的流程,只需知道回调函数的说明就可以使用工作流模块提供的功能,这对信息的隐藏也是有作用的。


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace CSharp_002_回调机制
{
    public partial class frmMain : Form
    {
        //定义回调
        private delegate void SetProgressBar2ValueCallBack(int value);
        //声明回调
        private SetProgressBar2ValueCallBack setProgressBar2ValueCallBack;

        public frmMain()
        {
            InitializeComponent();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            //初始化回调
            setProgressBar2ValueCallBack = new SetProgressBar2ValueCallBack(SetProgressBar2ValueMethod);

            Thread progressBar2Thread = new Thread(SetProgressBar2Value);
            progressBar2Thread.Start();

            for (int i = 0; i <= 100; i++)
            {
                Application.DoEvents();
                Thread.Sleep(50);
                pgProgressBar1.Value = i;
            }
        }

        //设置进度条2的值 的线程
        private void SetProgressBar2Value()
        {
            for (int i = 0; i <= 100;i++ )
            {
                Thread.Sleep(50);
                pgProgressBar2.Invoke(setProgressBar2ValueCallBack, i);
            }
        }
        //设置进度条2的值 被委托的方法
        private void SetProgressBar2ValueMethod(int value)
        {
            pgProgressBar2.Value = value;
        }

    }//end class frmMain
}

运行结果:

http://www.cnblogs.com/hanzhaoxin/archive/2013/02/18/2915275.html

时间: 2024-12-23 11:12:15

C# 委托的回调机制的相关文章

Delphi 函数指针(三大好处:灵活,委托的本质,回调机制)

首先学习: 指向非对象(一般的)函数/过程的函数指针 Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针.函数指针的声明只需要参数列表:如果是函数,再加个返回值.例如声明一个过程类型,该类型带一个通过引用传递的整型参数: type   IntProc = procedure (var Num: Integer); 这个过程类型与任何参数完全相同的例程兼容,即用它声明的变量,可以指向任何此类函数,并通过其进行函数的调用.下面是一个兼容例程: procedure Dou

Block、委托、回调函数原理剖析(在Object C语境)——这样讲还不懂,根本不可能!

开篇:要想理解Block和委托,最快的方法是搞明白“回调函数”这个概念. 做为初级选手,我们把Block.委托.回调函数,视为同一原理的三种不同名称.也就是说,现在,我们把这三个名词当成一回事.在这篇文章内,Block就是回调函数,委托也是回调函数,不再作详细的区分了.OK,Action! 那么,什么是回调函数?“回调”概念的主语是谁? 举个栗子(伪代码): 首先有个类,我们姑且称之为A类吧. A.h 文件 //声明回调函数:给指定的员工发放工资 -(void)paySalaryForStaff

细数Objective-C中的回调机制

一.协议 协议主要是提供接口.或是类似C++多重继承功能,为类提供一种修饰机制.协议不是为回调而生的,它应该表述一组互操作约定. 优点: 实现简单,容易理解. 强类型检查. 缺点: 类与类间建立了比较强的耦合关系 有可能需要较长期保存委托以进行回调.如果保留的委托需要有独占性,可能会给单件模式.以及多线程带来麻烦. 类只能通过一个方法完成一种类型的回调.代码逻辑很容易集中到一个方法中. 大部分回调使用实际无需通过协议暴露给外部. 二.使用respondsToSelector和performSel

Android的事件处理---监听机制和回调机制-总结

Android有两种方式的事件处理: 1.基于回调的事件处理    2.基于监听器的事件处理 一.先来大概说明一下监听器的事件处理的实现原理 (学过AWT .Swing的同学对监听器基本有一点了解.) ===>>>  监听事件是一种“面向对象”的事件处理  <<<=== 涉及三类对象: Event Source(事件源): 也就是按钮,菜单,窗口等 Event(事件):就是操作的状态,单击.触摸.长按.双击等 Event Listener(事件监听器):对用户的操作做出

【Android与IOS开发对比系列】之 回调机制

[Android与IOS开发对比系列]之 回调机制 Android和IOS的回调的实现原理基本相同,只是具体命名不同而已. 本文将总结 IOS的Delegate和block, Android的interface和Handler. IOS 协议 委托Delegate是协议的一种,通过@protocol声明.委托类的作用,一是传值,二是传事件. 举个例子: 要实现选相册图片, 依据图: C类是委托类,定义了一个传值方法. A类显示一个图片,点击按钮,进入B类选取图片. 当在B类选完图片,将实现met

OC3大回调模式使用总结(二)委托模式回调

OC 3大回调模式使用总结(二)委托模式回调 1.委托模式回调 主要用于 UITableView(UITableViewController),UICollectionView,UIPickerView,UITextField,UITextField 这几类控件,是使用委托模式封装的,使用方法和按钮类的控件不一样 委托模式,实际上也是一种对自身状态的汇报机制,某个状态或者事件的变化是不确定时间发生的,但是发生的时候就就得有某些应对措施,这些应对措施是提前写在协议中的; 与目标动作回调不同的是,委

Java回调机制

以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的,其实我刚开始也是这样不理解,看了人家说比较经典的回调方式: Class A实现接口CallBack callback——背景1 class A中包含一个class B的引用b ——背景2 class B有一个参数为call

java中的回调机制的理解(小例子)

这样的解释似乎还是比较难懂,这里举个简单的例子,程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序.程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法.目的达到.在C/C++中,要用回调函数,被掉函数需要告诉调用者自己的指针地址,但在JAVA中没有指针,怎么办?我们可以通过接口(interface)来实现定义回调函数. 正常情况下开发人员使用已经定义好的API,这个过程叫Call.但是有时这样不能满足需求,就需要程序员注册自己的程序,然后让

java回调机制(写的很好)

以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的,其实我刚开始也是这样不理解,看了人家说比较经典的回调方式: Class A实现接口CallBack callback——背景1 class A中包含一个class B的引用b ——背景2 class B有一个参数为call