代码改变世界

C# 事件

2014-08-08 17:26  wuzhang  阅读(4539)  评论(4编辑  收藏  举报

要创建一个事件驱动的程序需要下面的步骤:

1.         声明关于事件的委托;

2.         声明事件;

3.         编写触发事件的函数;

4.         创建事件处理程序;

5.         注册事件处理程序;

6.         在适当的条件下触发事件。

现在我们来编写一个自定义事件的程序。主人养了一条忠实的看门狗,晚上主人睡觉的时候,狗负责看守房子。一旦有小偷进来,狗就发出一个Alarm事件,主人接到Alarm事件后就会采取相应的行动。假设小偷于2014

 1 using System;
 2 
 3 //事件发送者
 4 class Dog
 5 {
 6     //1.声明关于事件的委托;
 7     public delegate void AlarmEventHandler(object sender, EventArgs e);
 8 
 9     //2.声明事件;   
10     public event AlarmEventHandler Alarm;
11 
12     //3.编写引发事件的函数;
13     public void OnAlarm()
14     {
15         if (this.Alarm != null)
16         {
17             Console.WriteLine("\n狗报警: 有小偷进来了,汪汪~~~~~~~");
18             this.Alarm(this, new EventArgs());   //发出警报
19          }
20     }
21 }
22 
23 //事件接收者
24 class Host
25 {
26     //4.编写事件处理程序
27     void HostHandleAlarm(object sender, EventArgs e)
28     {
29         Console.WriteLine("主  人: 抓住了小偷!");
30     }
31 
32     //5.注册事件处理程序
33     public Host(Dog dog)
34     {
35         dog.Alarm += new Dog.AlarmEventHandler(HostHandleAlarm);
36     }
37 }
38 
39 //6.现在来触发事件
40 class Program
41 {
42     static void Main(string[] args)
43     {
44         Dog dog = new Dog();
45         Host host = new Host(dog);
46 
47         //当前时间,从2008年12月31日23:59:50开始计时
48         DateTime now = new DateTime(2013, 12, 31, 23, 59, 50);
49         DateTime midnight = new DateTime(2014, 1, 1, 0, 0, 0);
50 
51         //等待午夜的到来
52         Console.WriteLine("时间一秒一秒地流逝... ");
53         while (now < midnight)
54         {
55             Console.WriteLine("当前时间: " + now);
56             System.Threading.Thread.Sleep(1000);    //程序暂停一秒
57             now = now.AddSeconds(1);                //时间增加一秒
58          }
59 
60         //午夜零点小偷到达,看门狗引发Alarm事件
61         Console.WriteLine("\n月黑风高的午夜: " + now);
62         Console.WriteLine("小偷悄悄地摸进了主人的屋内... ");
63         dog.OnAlarm();
64         Console.ReadLine();
65     }
66 }   

运行结果:

年元旦午夜时分到达。