zoukankan      html  css  js  c++  java
  • 委托与事件(五)

    通过事件可以订阅发布者的消息,存在异步问题,即如何让订阅者不影响发布者的执行,只是单纯的获取发布者的数据信息。

    以下代码完全取自张子阳博客

    • 发布者
     1 public class Publisher
     2 {
     3     //定义事件
     4     public event EventHandler MyEvent;
     5     public void DoSomething()
     6     {
     7         Console.WriteLine("DoSomething incoked!");
     8 
     9         if (MyEvent != null)
    10         {
    11             //获取多播委托的调用列表
    12             Delegate[] delArray = MyEvent.GetInvocationList();
    13             //异步执行委托
    14             foreach(Delegate del in delArray)
    15             {
    16                 EventHandler method = (EventHandler)del;
    17                 method.BeginInvoke(null, EventArgs.Empty, null, null);
    18             }
    19         }
    20     }
    21 }
    • 订阅者
     1     //第一个订阅者
     2     public class Subscriber1
     3     {
     4         public void OnEvent(object sender, EventArgs e)
     5         {
     6             Thread.Sleep(TimeSpan.FromSeconds(3));
     7             Console.WriteLine("Waited for 5 seconds, subscriber1 invoked!");
     8         }
     9     }
    10     //第二个订阅者
    11     public class Subscriber2
    12     {
    13         public void OnEvent(object sender, EventArgs e)
    14         {
    15             //throw new Exception("Subscriber2 Failed");
    16             Console.WriteLine("Waited for 0 seconds, subscriber2 invoked!");
    17         }
    18     }
    19     //第三个订阅者
    20     public class Subscriber3
    21     {
    22         public void OnEvent(object sender, EventArgs e)
    23         {
    24             Thread.Sleep(TimeSpan.FromSeconds(2));
    25             Console.WriteLine("Waited for 3 seconds, subscriber3 invoked!");
    26         }
    27     }
    • Main函数:
     1 static void Main(string[] args)
     2 {
     3     Publisher pub = new Publisher();
     4     pub.MyEvent += (new Subscriber1()).OnEvent;
     5     pub.MyEvent += (new Subscriber2()).OnEvent;
     6     pub.MyEvent += (new Subscriber3()).OnEvent;
     7 
     8     pub.DoSomething();
     9 
    10     Console.WriteLine("control back to client!
    ");
    11     Console.ReadLine();
    12 }

    输出结果:

  • 相关阅读:
    Leetcode 214. Shortest Palindrome
    Leetcode 5. Longest Palindromic Substring
    windows环境下MySQL-5.7.12-winx64下载安装与配置
    随机森林(Random Forests)
    机器学习基石笔记3——在何时可以使用机器学习(3)
    Linux服务器配置---ssh配置
    Linux基础命令---more
    Linux服务器---流量监控ntop
    Linux基础命令---gunzip
    Linux服务器---ssh登录
  • 原文地址:https://www.cnblogs.com/imstrive/p/6075251.html
Copyright © 2011-2022 走看看