1 /// <summary> 2 /// 事件:EventHanler 3 /// 用戶在單擊win窗口中的如按鈕,復(fù)選框等,就會引發(fā)事件,我們要寫代碼去處理這些事件。實現(xiàn) 處理事件的 事件處理程序 4 /// 在.Net里,有委托實現(xiàn)事件,具有事件的對象為:發(fā)布者。訂閱事件(處理事件)的為訂閱者。 5 /// 當(dāng)對象提供事件時,它會定義一個委托,則希望處理該事件的對象必須為這個委托提供函數(shù),該委托稱為事件,而處理該委托的函數(shù)稱為事件處理程序 6 /// 如,當(dāng)你創(chuàng)建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);//對象t17 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)//相關(guān)的簽名一定要一樣。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() //創(chuàng)建這個類的對象 9 {10 AlarmTime = new DateTime(2013, 4, 22, 21, 04, 0, 0) //初使化它的時間11 };12 c.Start(); //開始里面的Timer13 //調(diào)用里面的事件,這個事件是在時間到了的時候調(diào)用,而具體請看類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 AlarmClock26 {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()); //當(dāng)時間到了的時候,調(diào)用類的事件43 t.Stop();44 }45 }46 //EventHandler是預(yù)定義的委托,該語句定義TimesUp為類的事件47 public event EventHandler TimesUp;48 protected virtual void onTimeUp(EventArgs e)//注意,上面那個和下面這個是一體的49 {50 if (TimesUp != null) //當(dāng)時間到了的事件,就會調(diào)用這個事件,而具體是怎么實現(xiàn)的,由這個類的對象決定。51 TimesUp(this, e);52 }
1 /// <summary> 2 /// 事件與委托,這是一個非常重要的東西 3 /// 學(xué)好了還要學(xué)會怎么用才對! 4 /// </summary> 5 /// <param name="args"></param> 6 private static void Main(string[] args) 7 { 8 AlarmClock c=new AlarmClock() //創(chuàng)建這個類的對象 9 {10 Message = "Meeting with customer",11 AlarmTime = new DateTime(2013, 4, 22, 22, 01, 0, 0) //初使化它的時間12 };13 c.Start(); //開始里面的Timer14 //調(diào)用里面的事件,這個事件是在時間到了的時候調(diào)用,而具體請看類15 //其中,TimesUp對應(yīng)事件名稱: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);//可以包含參數(shù)了!22 }23 }24 25 //定義一個全新的事件類26 public class AlarmClockEventArgs:EventArgs27 {28 public AlarmClockEventArgs(string Message)//構(gòu)造29 {30 this.Message = Message;31 }32 public string Message { get; set; }33 }34 35 //定義一個委托,其中包含有上面的事件類型作參數(shù),難道事件的承載都是委托????!36 public delegate void AlarmClockEventHandler(object sender, AlarmClockEventArgs e);37 38 class AlarmClock39 {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)); //當(dāng)時間到了的時候,調(diào)用類的事件59 t.Stop();60 }61 }62 //AlarmClockEventHandler是預(yù)定義的委托,該語句定義TimesUp為類的事件63 public event AlarmClockEventHandler TimesUp;64 protected virtual void onTimeUp(AlarmClockEventArgs e)//注意,上面那個和下面這個是一體的65 {66 if (TimesUp != null) //當(dāng)時間到了的事件,就會調(diào)用這個事件,而具體是怎么實現(xiàn)的,由這個類的對象決定。67 TimesUp(this, e);68 }69 }