图解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#_事件 概述 今天用来演示事件的例子是模拟实现一个文件下载类,在这个类中我将定义一个DownLoad事件,这个事件用来在文件下载的过程中,向订阅这个事件的用户发出消息,而这个消息将用DownLoa ...
- DotNetCore跨平台~服务总线_事件总线的重新设计
理论闲话 之前在.netFramework平台用的好好的,可升级到.net core平台之后,由于不再需要二进制序列化,导致咱们的事件机制遇到了问题,之前大叔的事件一直是将处理程序序列化后进行存储的, ...
- 图解Android触摸事件分发
Android中触摸事件传递过程中最重要的是dispatchTouchEvent().onInterceptTouchEvent()和onTouchEvent()方法. View和Activity有d ...
- 第9章 用内核对象进行线程同步(1)_事件对象(Event)
9.1 等待函数 (1)WaitForSingleObject(hObject,dwMilliseonds); ①dwMilliseconds为INFINITE时表示无限等待 ②dwMilliseco ...
- C#_事件委托
CarDealer类 事件发布程序 using System; using System.Collections.Generic; using System.Linq; using System.Te ...
- C#_串口程序_二次打包_事件响应
using System;using System.IO.Ports;using System.Windows.Forms; namespace Dll_Serial_Comm{ public ...
- jQuery_第五章_事件和动画
Jquery中的事件与动画 一.window.onload和$(document).read()的细微差别 (1)执行时机 window.onload:所有元素(包括元素的所有关联文件)完全加载到浏览 ...
- jquery父元素和子元素点击事件传递问题_不可把父元素的事件传递给子元素_事件无限循环传递
前述:jquery中: 当一个元素的点击事件被触发时,会自动将该事件向父级元素逐级专递. 但是实际场景当中,我们可能会遇到需要在父级元素中定义点击事件,来触发特定子元素的点击事件,我就遇到了这么一个问 ...
- (92)Wangdao.com_第二十五天_线程机制_H5 Web Workers 分线程任务_事件 Event
浏览器内核 支撑浏览器运行的最核心的程序 IE 浏览器内核 Trident内核,也是俗称的IE内核Chrome 浏览器内核 统称为 Chromium 内核或 ...
随机推荐
- JavaScript 高级程序设计(第3版)笔记——chapter4:变量、作用域和内存问题
Chapter4 变量.作用域和内存问题 l 理解基本类型和引用类型的值 l 理解执行环境 l 理解垃圾收集 4.1基本类型和引用类型的值 l ECMAScript变量包含两种不同数据类型的值 ...
- c++,纯虚函数与抽象类
1.纯虚函数的定义: (1)虚函数被“初始化”为0的函数.声明纯虚函数的一般形式是virtual 函数类型 函数名(参数表列) =0;(2)纯虚函数没有函数体:(3)最后面的“=0”并不表示函数返回值 ...
- BZOJ 3384: [Usaco2004 Nov]Apple Catching 接苹果( dp )
dp dp( x , k ) = max( dp( x - 1 , k - 1 ) + *** , dp( x - 1 , k ) + *** ) *** = 0 or 1 ,根据情况 (BZOJ 1 ...
- listview,fragment结合起来
这是csdn上的以个demo,很适合初学者.来源:http://download.csdn.net/detail/endlife99/7274419,侵删. MainActiviy: package ...
- CodeForces 519B A and B and Compilation Errors【模拟】
题目意思还是蛮简单的,看 输入数据输出数据还是比较明显的 我用排序来写还是可以AC的 //#pragma comment(linker, "/STACK:16777216") // ...
- Week8(10月28日)
Part I:提问 =========================== 1. Lazy.Eager.Explicit Loading的关键字是什么? 2. 请比较三种加载方式的性能. Part ...
- ASP.NET MVC 5 学习教程:添加模型
原文 ASP.NET MVC 5 学习教程:添加模型 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控 ...
- kingso - / - Taocode
kingso - / - Taocode 这两天在线下搭建了kingso示例服务,有兴趣的同学请自取. 源代码位置:192.168.201.73:9022 /home/wcm/kingso 安 ...
- 比较优势 - MBA智库百科
比较优势 - MBA智库百科 比较优势 出自 MBA智库百科(http://wiki.mbalib.com/) 这是一个消除歧义页--使用相同或相近标题,而主题不同的条目列表.如果您是通过某个内部 ...
- adxl345的STM32驱动程序和硬件设计
一.硬件电路接口图片 1.ADXL345硬件接口图片使用的是SPI端口进行通信,这样读取数据比较快且后续也可以转化为IIC通信接口. 在网上找一些发现IIC接口的比较多,所以本人就DIY做SPI的通信 ...