概述

今天用来演示事件的例子是模拟实现一个文件下载类,在这个类中我将定义一个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#_事件的更多相关文章

  1. C#_事件

    C#_事件 概述 今天用来演示事件的例子是模拟实现一个文件下载类,在这个类中我将定义一个DownLoad事件,这个事件用来在文件下载的过程中,向订阅这个事件的用户发出消息,而这个消息将用DownLoa ...

  2. DotNetCore跨平台~服务总线_事件总线的重新设计

    理论闲话 之前在.netFramework平台用的好好的,可升级到.net core平台之后,由于不再需要二进制序列化,导致咱们的事件机制遇到了问题,之前大叔的事件一直是将处理程序序列化后进行存储的, ...

  3. 图解Android触摸事件分发

    Android中触摸事件传递过程中最重要的是dispatchTouchEvent().onInterceptTouchEvent()和onTouchEvent()方法. View和Activity有d ...

  4. 第9章 用内核对象进行线程同步(1)_事件对象(Event)

    9.1 等待函数 (1)WaitForSingleObject(hObject,dwMilliseonds); ①dwMilliseconds为INFINITE时表示无限等待 ②dwMilliseco ...

  5. C#_事件委托

    CarDealer类 事件发布程序 using System; using System.Collections.Generic; using System.Linq; using System.Te ...

  6. C#_串口程序_二次打包_事件响应

    using System;using System.IO.Ports;using System.Windows.Forms; namespace Dll_Serial_Comm{    public ...

  7. jQuery_第五章_事件和动画

    Jquery中的事件与动画 一.window.onload和$(document).read()的细微差别 (1)执行时机 window.onload:所有元素(包括元素的所有关联文件)完全加载到浏览 ...

  8. jquery父元素和子元素点击事件传递问题_不可把父元素的事件传递给子元素_事件无限循环传递

    前述:jquery中: 当一个元素的点击事件被触发时,会自动将该事件向父级元素逐级专递. 但是实际场景当中,我们可能会遇到需要在父级元素中定义点击事件,来触发特定子元素的点击事件,我就遇到了这么一个问 ...

  9. (92)Wangdao.com_第二十五天_线程机制_H5 Web Workers 分线程任务_事件 Event

    浏览器内核 支撑浏览器运行的最核心的程序 IE 浏览器内核            Trident内核,也是俗称的IE内核Chrome 浏览器内核            统称为 Chromium 内核或 ...

随机推荐

  1. rac 实例被莫名重启的案例分析

    详见原文博客链接地址: Rac 实例被莫名重启一列分析

  2. 【OpenCV】OpenCV2.4.6 与Visiual Studio 2008,Python2.7.5配置和图像载入显示

    自从OpenCV2.2开始,OpenCV 库便分成几个模块并位于lib文件中,本节介绍从OpenCV2.4.6与VS2008 .Python2.7.5如何配置环境,如何外部文件载 入图像.在窗口中显示 ...

  3. 【Nginx】启动报错-端口被占用

    将下载的windows版nginx的压缩包nginx-1.4.2.zip解压到F:\server\nginx-1.4.2里面. dos命令键入: F: cd F:\server\nginx-1.4.2 ...

  4. IAR之工程配置

    参考 : IAR的Workspace顶部下拉菜单中Debug和Release http://blog.csdn.net/yanpingsz/article/details/5588525 ++++++ ...

  5. Javascript 运动应用 02

                                                                         JS运动应用   多个物体同时运动 例子:多个Div,鼠标移入 ...

  6. PHP学习笔记1-常量,函数

    常量:使用const(php5)声明,只能被赋值一次,php5以下版本使用define: <?php const THE_VALUE = 100;//PHP5中才有const echo THE_ ...

  7. js中innerHTML与innerText的用法与区别

    用法: <div id="test">    <span style="color:red">test1</span> te ...

  8. QDebug &operator<<出错(根据QString来找,是不得要领的,而是应该根据QString所在的对象来思考)

    程序运行后,总是崩溃在这个地方:inline QDebug &operator<<(const QString & t) 我应该用什么办法找出是哪个QString出了问题呢 ...

  9. Uniconnection 连 mysql 有时会断线的

    你定义localfailover:=ture.断线后会自己接上  firedac没这种功能.只有unidac有

  10. 分布式文件系统GlusterFS

    转自于:http://www.cnblogs.com/zitjubiz/archive/2012/11/30/Distributed_File_System_glusterFS.html Gluste ...