图解C#_事件

概述

今天用来演示事件的例子是模拟实现一个文件下载类,在这个类中我将定义一个DownLoad事件,这个事件用来在文件下载的过程中,向订阅这个事件的用户发出消息,而这个消息将用DownLoadEventArgs类来封装,这个消息类中定义一个percent字段,用来保存当前已下载文件的百分比,下面请看官欣赏过程:

一、定义要发送给用户(订阅事件者)的消息类


     internal class DownLoadEventArgs: EventArgs
{
private readonly Int32 _percent; //文件下载百分比
public DownLoadEventArgs(Int32 percent)
{
_percent = percent;
} public Int32 Percent
{
get
{
return _percent;
}
}
}

二、定义文件下载类

这个类中定义一个DownLoad事件,一个当事件发生时通知用户(事件订阅者)的方法OnFileDownloaded,一个文件下载方法FileDownload,如下:

 internal class FileManager
{
public event EventHandler<DownLoadEventArgs> DownLoad; //定义事件 protected virtual void OnFileDownloaded(DownLoadEventArgs e)
{
EventHandler<DownLoadEventArgs> temp = DownLoad;
if(temp != null)
{
temp(this, e);
}
} public void FileDownload(string url)
{
int percent = ;
while(percent <= )
{
//模拟下载文件
++percent;
DownLoadEventArgs e = new DownLoadEventArgs(percent);
OnFileDownloaded(e); //事件触发,向订阅者发送消息(下载百分比的值) Thread.Sleep();
}
}
}

三、客户端订阅事件

在客户端实例化文件下载类,然后绑定事件,如下:

     class Program
{
static void Main(string[] args)
{
FileManager manager = new FileManager();
manager.DownLoad += Manager_DownLoad; //订阅事件
manager.FileDownload("http://asdfwqerqasdfs.zip"); //下载文件
} /// <summary>
/// 接到事件通知后要执行的方法
/// </summary>
/// <param name="sender">事件触发对象</param>
/// <param name="e">事件发送过来的消息(百分比)</param>
private static void Manager_DownLoad(object sender, DownLoadEventArgs e)
{
Console.WriteLine(string.Format("文件已下载:{0}%", e.Percent.ToString()));
}
}

四、显示结果

图解C#_事件

五、图示

图解C#_事件

六、个人理解

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

总结

写博客不容易,尤其是对我这样的c#新人,如果大家觉得写的还好,请推荐或打赏支持,我会更加努力写文章的。

图解C#_事件

上一篇:Java技术中如何使用keepalived实现双机热备


下一篇:WebAPi(selfhost)