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 }