码迷,mamicode.com
首页 > Windows程序 > 详细

C# 事件基础知识

时间:2017-08-03 14:58:53      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:注册   ace   驱动程序   自定义   lin   信号   collect   .net   步骤   

事件是什么

       一个事件代表程序中发生一件显著事情的信号。它包括事件的发送方和接收方。我们把触发事件的对象称为事件的发送者,响应事件的对象称为事件的接收者。在C#中,事件和委托经常联系在一块,他们的关系就是对象和类的关系。

       在C#的窗体应用开发中,.NET 中预定义了许多种专门用于事件的委托类型,比如 EventHandler、 KeyEventHandler、 MouseEventHandler 等。因此这里主要介绍怎么自定义一个事件。

怎么使用事件

 (1)使用事件其实就是一个创建事件驱动程序的过程。一般采取的步骤如下:

     1.声明关于事件的委托;
     2.声明事件;
     3.编写触发事件的函数;
     4.创建事件处理程序;
     5.注册事件处理程序;
     6.在适当的条件下触发事件。

    (2) 编写一个自定义事件。

       深林里有一只兔子和一只羊,晚上兔子睡觉的时候,羊负责看守洞口。如果有狼出没,羊就发出一个 Alarm 事件,兔子接到 Alarm 事件后就和羊一起采取行动。假设狼于 2017 年8月3日晚上12点整到达。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace eventDemo
 8 {
 9     class Sheep
10     { 
11         //1.声明关于事件的委托;
12         public delegate void AlarmEventHandler(object sender, EventArgs e);
13         
14         //2.使用event关键字声明事件;
15         public event AlarmEventHandler Alarm;  
16         
17         public void OnAlarm()      //3.编写引发事件的函数;
18         {
19             if (this.Alarm != null)
20                 this.Alarm(this, new EventArgs()); //发出警报
21         }
22     }
23         //事件接收者
24     class Rabbit
25     {
26         //4.编写事件处理程序
27         void RabbitHandleAlarm(object sender, EventArgs e)
28         {
29             Console.WriteLine("兔子: 狼来啦,快躲起来! ");
30         }
31         //5.注册事件处理程序;
32         public Rabbit(Sheep sheep)
33         {
34             sheep.Alarm += new Sheep.AlarmEventHandler(RabbitHandleAlarm);
35         }
36     }
37     //6.现在来触发事件
38     class Program
39     {
40         static void Main(string[] args)
41         {
42             Sheep sheep = new Sheep();
43             Rabbit rabbit = new Rabbit(sheep);
44             DateTime now = new DateTime(2017, 8, 2, 23, 59, 55);
45             DateTime midnight = new DateTime(2017, 8, 3, 0, 0, 0);
46             Console.WriteLine("时间一秒一秒地流逝,等待午夜的到来... ");
47             while (true)
48             {
49                 Console.WriteLine("当前时间: " + now);
50                 //午夜零点狼出没,羊引发 Alarm 事件
51                 if (now == midnight)
52                 {
53                     Console.WriteLine("\n 沙沙沙, 狼悄悄地来到了羊的附近...");
54                     //引发事件
55                     Console.WriteLine("\n 羊报警: 有狼出没,咩~~~~~~~");
56                     sheep.OnAlarm();
57                     break;
58                 }
59                 System.Threading.Thread.Sleep(1000); //程序暂停一秒
60                 now = now.AddSeconds(1); //时间增加一秒
61             }
62         }
63     }
64 }

         当午夜时分小偷到达时, sheep 调用 sheep.OnAlarm()函数,从而触发 Alarm 事件,于是系统找到并执行了注册在 Alarm 事件中的事件处理程序 RabbitHandleAlarm()。引发事件的代码
(即 OnAlarm()函数)和事件处理程序是分离的,引发事件的代码只管调用“Alarm()”,而事件处理程序另外独立定义,它们之间通过事件 Alarm 联系起来。 

注意事项

 事件处理程序的参数应该和事件委托相同。一般情况下,事件处理程序接受两个参数,

一个是事件的发送者sender,一个是事件参数e 。

Ending.....

C# 事件基础知识

标签:注册   ace   驱动程序   自定义   lin   信号   collect   .net   步骤   

原文地址:http://www.cnblogs.com/wozuiaidachengzi/p/7279445.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!