C# (事件触发)回调函数,完美处理各类疑难杂症!

每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!

废话说多了......

首先:什么情形下用回调函数?

通过代码:举个简单的例子

//事件发送者
    class Dog
    {
        //1.声明关于事件的委托;
        public delegate void AlarmEventHandler(object sender, EventArgs e);

        //2.声明事件;
        public event AlarmEventHandler Alarm;

        //3.编写引发事件的函数;
        public void OnAlarm()
        {
            if (this.Alarm != null)
            {
                Console.WriteLine("\n狗报警: 有小偷进来了,汪汪~~~~~~~");
                this.Alarm(this, new EventArgs());   //发出警报
            }
        }
    }

    //事件接收者
    class Host
    {
        //4.编写事件处理程序
        void HostHandleAlarm(object sender, EventArgs e)
        {
            Console.WriteLine("主人: 抓住了小偷!");
        }

        //5.注册事件处理程序
        public Host(Dog dog)
        {
            dog.Alarm += new Dog.AlarmEventHandler(HostHandleAlarm);
        }
    }

    //6.现在来触发事件
    class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            Host host = new Host(dog);

            //当前时间,从2008年12月31日23:59:50开始计时
            DateTime now = new DateTime(2015, 12, 31, 23, 59, 50);
            DateTime midnight = new DateTime(2016, 1, 1, 0, 0, 0);

            //等待午夜的到来
            Console.WriteLine("时间一秒一秒地流逝... ");
            while (now < midnight)
            {
                Console.WriteLine("当前时间: " + now);
                System.Threading.Thread.Sleep(1000);    //程序暂停一秒
                now = now.AddSeconds(1);                //时间增加一秒
            }

            //午夜零点小偷到达,看门狗引发Alarm事件
            Console.WriteLine("\n月黑风高的午夜: " + now);
            Console.WriteLine("小偷悄悄地摸进了主人的屋内... ");
            dog.OnAlarm();
            Console.ReadLine();
        }
    }

未完继续:--》

时间: 2024-08-28 11:06:35

C# (事件触发)回调函数,完美处理各类疑难杂症!的相关文章

详解C#委托,事件与回调函数

.Net编程中最经常用的元素,事件必然是其中之一.无论在ASP.NET还是WINFrom开发中,窗体加载(Load),绘制(Paint),初始化(Init)等等.“protected void Page_Load(object sender, EventArgs e)”这段代码相信没有人不熟悉的.细心一点一定会发现,非常多的事件方法都是带了“object sender, EventArgs e”这两个参数.这是不是和委托非常相似呢? 一.委托(有些书中也称为委派) 委托是什么呢?这个名字的意思已

OpenCV for Python 学习 (二 事件与回调函数)

今天主要看了OpenCV中的事件以及回调函数,这么说可能不准确,主要是下面这两个函数(OpenCV中还有很多这些函数,可以在 http://docs.opencv.org/trunk/modules/highgui/doc/user_interface.html 找到,就不一一列举了),然后自己做了一个简单的绘图程序 函数如下: cv2.setMouseCallback(windowName, onMouse[, param]) cv2.createTrackbar(trackbarName,

C#学习笔记--详解委托,事件与回调函数

.Net编程中最经常用的元素,事件必然是其中之一.无论在ASP.NET还是WINFrom开发中,窗体加载(Load),绘制(Paint),初始化(Init)等等.“protected void Page_Load(object sender, EventArgs e)”这段代码相信没有人不熟悉的.细心一点一定会发现,非常多的事件方法都是带了“object sender, EventArgs e”这两个参数.这是不是和委托非常相似呢? 一.委托(有些书中也称为委派) 委托是什么呢?这个名字的意思已

委托、事件与回调函数(续)

C#中的委托和事件(续) --此篇来自于Jimmy Zhang的随手记!本人觉得讲的很详细很值得推荐 引言 如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识.但那些远不是委托和事件的全部内容,还有很多的地方没有涉及.本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器.异常处理.超时处理和异步方法调用等内容. 为什么要使用事件而不是委托变量? 在 C#中的委托和事件 中,我提出了两个为什么在类型中使用事件向外部提供方法注册,而不是直接使

node.js 回调函数、事件循环、EventEmitter ar

异步编程  node.js 编程的直接体现就是回调,异步编程依托于回调来实现: node使用了大量的回调函数,所有API都支持回调函数 .如读取文件等. 这里对不懂线程和异步和同步的稍微解释下这三个名词 . 线程 : 简单的说就是做一件事 . 即执行一段程序代码 .js引擎就是一个单线程 的 处理 方式 .单线程是说 同一时间只能做一件事 . 同步 :就是这件事必须要先做完前面的才能做后面的,否则后面的无法完成. 这就像我们的js代码会从上往下 运行 . 异步 :简单的说就是两个线程,你做你的,

Node js 安装+回调函数+事件

/* 从网站 https://nodejs.org/zh-cn/ 下载 这里用的 9.4.0 版本 下载完安装 安装目录是 D:\ApacheServer\node 一路默认安装 安装后打开cmd命令行输入 path 在显示的结果中查找是否有 D:\ApacheServer\node有的话表示环境变量中已经包含了 D:\ApacheServer\node\ 可以在cmd中直接使用 node 这个命令 如在当前命令行中输入 node --version 显示 v9.4.0 当前nodejs的版本

Java(Android)回调函数详解

一.前言 本周有位入行开发不久的朋友问我回调究竟是个什么概念,在网上看了很多的回调函数解释,但是越看越乱.虽然回调函数这个梗已经不新鲜了,这里还是用书面的形式记录下. 如果有了解的,就无需再看. 二.概念 概念上,这里引用百度百科的解释,如下: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条

PHP回调函数--call_user_func_array

全局函数的回调 这里的全局函数的意思,是直接使用function定义的函数,它不包含在任何对象或类之中.请看下面的例子 示例代码 $msg1 , $msg2 ){    echo 'msg1:'.$msg1;    echo "<br />\n";    echo 'msg2:'.$msg2;}$fnName = "fnCallBack";$params = array( 'hello' , 'world' );call_user_func_array(

当stop()遇到animate()的回调函数

animate()方法是jquery中自定义动画的方法,是js动画.在animate()方法里,可以有一个回调函数,这个回调函数在动画执行完之后执行. 而stop()方法是停止当前元素的当前动画队列里面的动画,举个栗子: //给向右移动添加事件 $(".mid-img>.to-right").on("click", function () { //变化偏移量和图片index if(self.img_index==self.img_num){ //此处是当图片为