弱事件管理器及WeakEventManager,IWeakEventListener的使用

CarDealer类发布事件,Consumer类(实现IWeakEventListener接口)订阅事件

实现代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Windows;

namespace ConsoleDelegate
{
    class Program
    {
        static void Main(string[] args)
        {
            CarDealer dealer = new CarDealer("Obama");
            Consumer Jack = new Consumer("Jack");
            WeakCarInfoEventManager.AddListener(dealer, Jack);
            dealer.NewCar("BMW");

            Consumer Bidden = new Consumer("Bidden");
            WeakCarInfoEventManager.AddListener(dealer, Bidden);
            dealer.NewCar("EAGLE");
        }
    }

    public class CarInfoEventArgs : EventArgs
    {
        public CarInfoEventArgs(string name)
        {
            this.Car = name;
        }

        public string Car { get; private set; }
    }

    public class CarDealer
    {
        private string name;
        public CarDealer(string name)
        {
            this.name = name;
        }

        public event EventHandler<CarInfoEventArgs> NewCarInfo;
        public void NewCar(string car)
        {
            Console.WriteLine("{0}, New Car: {1}", name, car);
            NewCarInfo(this, new CarInfoEventArgs(car));
        }
    }

    public class Consumer : IWeakEventListener
    {
        private string name;
        public Consumer(string name)
        {
            this.name = name;
        }

        private void NewCarIsHere(object sender, CarInfoEventArgs e)
        {
            Console.WriteLine("{0}, new car :{0} is here............", name, e.Car);
        }

        bool IWeakEventListener.ReceiveWeakEvent(Type managerType, object source, EventArgs e)
        {
            NewCarIsHere(source, e as CarInfoEventArgs);
            return true;
        }
    }

    public class WeakCarInfoEventManager : WeakEventManager
    {
        public static void AddListener(object source,IWeakEventListener e)
        {
            CurrentManager.ProtectedAddListener(source, e);
        }

        public static void RemoveListener(object source, IWeakEventListener e)
        {
            CurrentManager.ProtectedRemoveListener(source, e);
        }

        public static WeakCarInfoEventManager CurrentManager
        {
            get
            {
                WeakCarInfoEventManager manager = GetCurrentManager(typeof(WeakCarInfoEventManager))
                    as WeakCarInfoEventManager;
                if(manager ==null)
                {
                    manager = new WeakCarInfoEventManager();
                    SetCurrentManager(typeof(WeakCarInfoEventManager), manager);
                }

                return manager;
            }
        }

        protected override void StartListening(object source)
        {
            (source as CarDealer).NewCarInfo += CarDealer_NewCarInfo;
        }

        public void CarDealer_NewCarInfo(object sender, CarInfoEventArgs e)
        {
            DeliverEvent(sender, e);
        }

        protected override void StopListening(object source)
        {
            (source as CarDealer).NewCarInfo += CarDealer_NewCarInfo;
        }
    }
}

转载:http://blog.csdn.net/foreverling/article/details/38312927

时间: 2024-09-13 01:27:16

弱事件管理器及WeakEventManager,IWeakEventListener的使用的相关文章

android-Android 自己写的一个全局事件管理器,感觉还有点儿问题,提上代码,希望大神们修改修改!!!

问题描述 Android 自己写的一个全局事件管理器,感觉还有点儿问题,提上代码,希望大神们修改修改!!! import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import android.os

Zend Framework 2.0事件管理器(The EventManager)入门教程_php实例

概述 EventManger是一个为以下使用情况设计的组件: 复制代码 代码如下: 实现简单的主题/观察者模式 实现面向切面的设计 实现事件驱动的架构 基本的架构允许你添加和解除指定事件的侦听器,无论是在一个实例基础还是一个共享的集合:触发事件:终止侦听器的执行. 快速入门 通常,你将会在一个类中创建一个EventManager. 复制代码 代码如下: use Zend\EventManager\EventManagerInterface; use Zend\EventManager\Event

Win7无法打开事件查看器怎么解决?

  事件查看器相当于电脑的日志,可以看到每天电脑硬件软件以及系统运行出现问题的信息,也会记录在Windows系统中出现的安全事件,不过有不少小伙伴都说打不开事件查看器,这是什么原因呢?下面让小编带大家一起来解决这个问题吧. 解决Win7系统的"事件查看器"无法启动的步骤 1.双击桌面的"计算机",打开资源管理器,根据路径 "C:/windows/system32/logfiles/wmi" 找到目录下"RTbackup"文件夹

Win7系统打不开事件查看器怎么办?

  Win7系统打不开事件查看器怎么办?事件查看器不仅可以查看关于硬件.软件以及系统问题的信息,也可以监视Windows 操作系统中的安全事件.但最近有Win7系统用户反映,事件查看器打不开.这有什么办法可以解决呢?下面一起跟小编来看看教程吧. 解决Win7系统的"事件查看器"无法启动的步骤 1.双击桌面的"计算机",打开资源管理器,根据路径 "C:/windows/system32/logfiles/wmi" 找到目录下"RTback

为什么MQ新建队列管理器后连接状态总为“已断开连接”

问题描述 我在windows2003上安装MQ6.0,为什么"新建"了一个队列管理器,但是连接状态总为"已断开连接",无法在其下面建立队列. 解决方案 解决方案二:去Windows的事件管理器中看看有没有出错消息记录了.解决方案三:把MQexplorer再安装一遍,不用卸载试一试解决方案四:关闭重启下就OK了!解决方案五:MQ安装可能有问题,或者新建队列管理器的时候出错了,打开详细内容看下不就知道,或者直接用命令简队列管理器试试.

在线密码管理器LastPass被黑

本文讲的是 在线密码管理器LastPass被黑,在线密码管理器LastPass公司在上周五公布了其网络被黑事件,LastPass用户将会看到建议修改主密码的弹出框. 经过深入调查公司安全团队检测到的"可疑活动",LastPass公司在周一发布的一篇博客帖子中透露了此次遭受攻击事件.调查并未发现有任何迹象显示攻击者盗取了用户密码库中的加密数据,LastPass用户账户也并未被侵入者染指.即便如此,攻击者依然偷取了账户电子邮件地址.密码提示信息.用户服务器salt值和身份认真散列值. 后两

mSecure密码管理器发布新版本 但一些功能不再可用

mSecure密码管理器可以帮助苹果,Windows和Android用户安全地管理各种设备上的密码,但其最新推出的版本并未包含某些同步功能. 如果你的所有网站,云服务,应用程序,投资,银行,信用卡和其他敏感帐户信息都是错误的,那就将面临危机四伏的境地. mSeven软件公司创建并维护了让许多MacOS和iOS用户广受欢迎的mSecure密码管理应用程序,并正在采取一种大胆策略来保护这些信息.然而,一些用户开始对于该公司在2017年5月初发布的新版本mSecure 5平台中移除了对Wi-Fi和Dr

用社交网络连接WebSphere MQ:列队管理器和MQ应用程序的Twitter通知

如今,社交网络无所不在 -- 为了与朋友联系,或是为了让自己与时俱进,抑或是为了让别人获知共同关心话题的最新进展.社交网络在企业中也很有用.本文将向您展示如何快速而轻松地在您的 WebSphere MQ 应用程序中使用社交网络软件(比如 Twitter)向广大的系统管理员或最终用户,甚至是向其他应用程序或中间件发送状态及问题信息.本文中的示例使用的是面向 WebSphere Application Server Community Edition 运行时的 JEE 技术(简单的消息驱动的 bea

Web 服务事件管理一览表

web 事件 ID 说明 1 装入映射文件 %1 出错,错误 %2. 2 用户 %1:登录失败 %2. 3 摘要式验证:对用户 "%1" .成员域 "%2" 的验证无效. 4 摘要式验证:不能识别用户 "%1",成员域 "%2". 5 摘要式验证:对用户 "%1". 成员域 "%2" 的验证停止. 日志 事件 ID 说明 1 %1 的 IIS 日志无法继续运行,因为发生了磁盘满的错误.