zoukankan      html  css  js  c++  java
  • 图解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     }

    四、显示结果

     

    五、图示

    六、个人理解

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

    总结

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

  • 相关阅读:
    typedef的用法
    重定向在网络编程中的理解
    简答的理解C语言中的各种类型函数
    栈、堆、静态存储区
    标识符起作用范围----作用域、连接类型、存储期
    main函数的argc和argv
    基本数据类型
    数组与指针
    第一章 CLR的执行模型
    Revit 二次开发 沿弧形路径创建拉伸屋顶
  • 原文地址:https://www.cnblogs.com/yezhu008/p/5575703.html
Copyright © 2011-2022 走看看