標籤:
概述
今天用來示範事件的例子是類比實現一個檔案下載類,在這個類中我將定義一個DownLoad事件,這個事件用來在檔案下載的過程中,向訂閱這個事件的使用者發出訊息,而這個訊息將用DownLoadEventArgs類來封裝,這個訊息類中定義一個percent欄位,用來儲存當前已下載檔案的百分比,下面請看官欣賞過程:
一、定義要發送給使用者(訂閱事件者)的訊息類
1 internal class DownLoadEventArgs: EventArgs 2 { 3 private readonly Int32 _percent; //檔案下載百分比 4 public DownLoadEventArgs(Int32 percent) 5 { 6 _percent = percent; 7 } 8 9 public Int32 Percent10 {11 get12 {13 return _percent;14 }15 }16 }
二、定義檔案下載類
這個類中定義一個DownLoad事件,一個當事件發生時通知使用者(事件訂閱者)的方法OnFileDownloaded,一個檔案下載方法FileDownload,如下:
1 internal class FileManager 2 { 3 public event EventHandler<DownLoadEventArgs> DownLoad; //定義事件 4 5 6 protected virtual void OnFileDownloaded(DownLoadEventArgs e) 7 { 8 EventHandler<DownLoadEventArgs> temp = DownLoad; 9 if(temp != null)10 {11 temp(this, e);12 }13 }14 15 public void FileDownload(string url)16 {17 int percent = 0;18 while(percent <= 100)19 {20 //類比下載檔案21 ++percent;22 DownLoadEventArgs e = new DownLoadEventArgs(percent);23 OnFileDownloaded(e); //事件觸發,向訂閱者發送訊息(下載百分比的值)24 25 Thread.Sleep(1000);26 }27 }28 }
三、客訂閱事件
在用戶端執行個體化檔案下載類,然後綁定事件,如下:
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 FileManager manager = new FileManager(); 6 manager.DownLoad += Manager_DownLoad; //訂閱事件 7 manager.FileDownload("http://asdfwqerqasdfs.zip"); //下載檔案 8 } 9 10 /// <summary>11 /// 接到事件通知後要執行的方法12 /// </summary>13 /// <param name="sender">事件觸發對象</param>14 /// <param name="e">事件發送過來的訊息(百分比)</param>15 private static void Manager_DownLoad(object sender, DownLoadEventArgs e)16 {17 Console.WriteLine(string.Format("檔案已下載:{0}%", e.Percent.ToString()));18 }19 }
四、顯示結果
五、圖示
六、個人理解
其實事件就是用將一系列訂閱者法綁定在一個委託上,當方法執行時,觸發到該事件時,就會按通知綁定在委託上的方法去執行。
總結
寫部落格不容易,尤其是對我這樣的c#新人,如果大家覺得寫的還好,請點贊或打賞支援,我會更加努力寫文章的。
圖解C#_事件