Fork me on GitHub
C#_事件

C#_事件

概述

 

今天用来演示事件的例子是模拟实现一个文件下载类,在这个类中我将定义一个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 Percent
10         {
11             get
12             {
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     }
复制代码

 

 

 

四、显示结果

 

 

 

 

五、图示

 

 

六、个人理解

 

其实事件就是用将一系列订阅方法绑定在一个委托上,当方法执行时,触发到该事件时,就会按通知绑定在委托上的方法去执行。

 

 

 

总结

posted on 2016-06-12 10:16  HackerVirus  阅读(337)  评论(0编辑  收藏  举报