1 /// <summary>
2 /// 事件:EventHanler
3 /// 用户在单击win窗口中的如按钮,复选框等,就会引发事件,我们要写代码去处理这些事件。实现 处理事件的 事件处理程序
4 /// 在.Net里,有委托实现事件,具有事件的对象为:发布者。订阅事件(处理事件)的为订阅者。
5 /// 当对象提供事件时,它会定义一个委托,则希望处理该事件的对象必须为这个委托提供函数,该委托称为事件,而处理该委托的函数称为事件处理程序
6 /// 如,当你创建button并双击它时,就会自动添加一个事件处理程序。
7 /// </summary>
8 class Program
9 {
10 /// <summary>
11 /// 下面是一个Timer类处理事件
12 /// </summary>
13 /// <param name="args"></param>
14 static void Main(string[] args)
15 {
16 Timer t=new Timer(1000);//对象t
17 t.Elapsed+=new ElapsedEventHandler(t_ela);//对象t的一个事件,t_ela为事件t.Elapsed的处理程序
18 t.Start();
19 Console.ReadLine();
20 }
21 static void t_ela(object sender, ElapsedEventArgs e)//相关的签名一定要一样。
22 {
23 Console.SetCursorPosition(0,0);
24 Console.WriteLine(DateTime.Now);
25 }
26 }
1 /// <summary>
2 /// 下面是一个FileSystemWatcher类处理事件
3 /// </summary>
4 /// <param name="args"></param>
5 static void Main(string[] args)
6 {
7 FileSystemWatcher fSysW=new FileSystemWatcher()
8 {
9 Path = @"c:\",
10 Filter = "*.txt"
11 };
12 //---wire up the event handlers----
13 fSysW.Deleted += new FileSystemEventHandler(fSysW_Deleted);
14 fSysW.Renamed += new RenamedEventHandler(fSysW_Renamed);//这个事件有些特别
15 fSysW.Changed += new FileSystemEventHandler(fSysW_Changed);
16 fSysW.Created += new FileSystemEventHandler(fSysW_Created);
17
18 fSysW.EnableRaisingEvents = true;
19 Console.ReadLine();
20 }
21 static void fSysW_Deleted(object sender, FileSystemEventArgs e)
22 {
23 Console.WriteLine("fSysW_Deleted" + e.FullPath);
24 }
25 static void fSysW_Renamed(object sender, RenamedEventArgs e)
26 {
27 Console.WriteLine("fSysW_Renamed" + e.FullPath);
28 }
29 static void fSysW_Changed(object sender, FileSystemEventArgs e)
30 {
31 Console.WriteLine("fSysW_Changed" + e.FullPath);
32 }
33 static void fSysW_Created(object sender, FileSystemEventArgs e)
34 {
35 Console.WriteLine("fSysW_Created" + e.FullPath);
36 }
1 /// <summary>
2 /// 下面是一个自定义类处理事件
3 ///
4 /// </summary>
5 /// <param name="args"></param>
6 private static void Main(string[] args)
7 {
8 AlarmClock c=new AlarmClock() //创建这个类的对象
9 {
10 AlarmTime = new DateTime(2013, 4, 22, 21, 04, 0, 0) //初使化它的时间
11 };
12 c.Start(); //开始里面的Timer
13 //调用里面的事件,这个事件是在时间到了的时候调用,而具体请看类
14 c.TimesUp+=new EventHandler(c_TimesUp);
15 Console.ReadLine();
16 }
17 static void c_TimesUp(object sender, EventArgs e)
18 {
19 Console.WriteLine("Times up!");
20 }
21
22
23 }
24
25 class AlarmClock
26 {
27 private Timer t;
28 public DateTime AlarmTime { get; set; }
29 public void Start()
30 {
31 t.Start();
32 }
33 public AlarmClock()
34 {
35 t=new Timer(100);
36 t.Elapsed+=new ElapsedEventHandler(t_Elapsed);
37 }
38 void t_Elapsed(object sender, ElapsedEventArgs e)
39 {
40 if (DateTime.Now >= this.AlarmTime)
41 {
42 onTimeUp(new EventArgs()); //当时间到了的时候,调用类的事件
43 t.Stop();
44 }
45 }
46 //EventHandler是预定义的委托,该语句定义TimesUp为类的事件
47 public event EventHandler TimesUp;
48 protected virtual void onTimeUp(EventArgs e)//注意,上面那个和下面这个是一体的
49 {
50 if (TimesUp != null) //当时间到了的事件,就会调用这个事件,而具体是怎么实现的,由这个类的对象决定。
51 TimesUp(this, e);
52 }
1 /// <summary>
2 /// 事件与委托,这是一个非常重要的东西
3 /// 学好了还要学会怎么用才对!
4 /// </summary>
5 /// <param name="args"></param>
6 private static void Main(string[] args)
7 {
8 AlarmClock c=new AlarmClock() //创建这个类的对象
9 {
10 Message = "Meeting with customer",
11 AlarmTime = new DateTime(2013, 4, 22, 22, 01, 0, 0) //初使化它的时间
12 };
13 c.Start(); //开始里面的Timer
14 //调用里面的事件,这个事件是在时间到了的时候调用,而具体请看类
15 //其中,TimesUp对应事件名称:
16 c.TimesUp+=new AlarmClockEventHandler(c_TimesUp);
17 Console.ReadLine();
18 }
19 static void c_TimesUp(object sender, AlarmClockEventArgs e)
20 {
21 Console.WriteLine(DateTime.Now.ToShortTimeString()+" : "+e.Message);//可以包含参数了!
22 }
23 }
24
25 //定义一个全新的事件类
26 public class AlarmClockEventArgs:EventArgs
27 {
28 public AlarmClockEventArgs(string Message)//构造
29 {
30 this.Message = Message;
31 }
32 public string Message { get; set; }
33 }
34
35 //定义一个委托,其中包含有上面的事件类型作参数,难道事件的承载都是委托??!!
36 public delegate void AlarmClockEventHandler(object sender, AlarmClockEventArgs e);
37
38 class AlarmClock
39 {
40 private Timer t;
41 public DateTime AlarmTime { get; set; }
42 public string Message { get; set; }
43
44 public AlarmClock()
45 {
46 t = new Timer(100);
47 t.Elapsed += new ElapsedEventHandler(t_Elapsed);
48 }
49 public void Start()
50 {
51 t.Start();
52 }
53
54 void t_Elapsed(object sender, ElapsedEventArgs e)
55 {
56 if (DateTime.Now >= this.AlarmTime)
57 {
58 onTimeUp(new AlarmClockEventArgs(this.Message)); //当时间到了的时候,调用类的事件
59 t.Stop();
60 }
61 }
62 //AlarmClockEventHandler是预定义的委托,该语句定义TimesUp为类的事件
63 public event AlarmClockEventHandler TimesUp;
64 protected virtual void onTimeUp(AlarmClockEventArgs e)//注意,上面那个和下面这个是一体的
65 {
66 if (TimesUp != null) //当时间到了的事件,就会调用这个事件,而具体是怎么实现的,由这个类的对象决定。
67 TimesUp(this, e);
68 }
69 }