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

简介: CarDealer类发布事件,Consumer类(实现IWeakEventListener接口)订阅事件 实现代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;namespace ConsoleDele

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;
        }
    }
}


目录
相关文章
|
5月前
LabVIEW使用多个事件结构来处理同一个事件
LabVIEW使用多个事件结构来处理同一个事件
107 0
[虚幻引擎插件介绍] DTGlobalEvent 蓝图全局事件, Actor, UMG 相互回调,自由回调通知事件函数,支持自定义参数。
本插件可以在虚幻的蓝图 Actor, Obiect,UMG 里面指定绑定和执行消息,可带自定义参数。 参数支持 Bool,Byte,Int,Int64,Float,Name,String,Text,Vector,Rotator,Transform,Object,Actor。
79 0
|
安全 数据安全/隐私保护
如何处理多个Yii2.0应用程序之间的SSO会话共享?
如何处理多个Yii2.0应用程序之间的SSO会话共享?
|
存储 Go 数据库
第二十章 CSP Session 管理 - 状态管理
第二十章 CSP Session 管理 - 状态管理
93 0
|
关系型数据库 MySQL 数据库连接
上下文管理器 | 学习笔记
快速学习 上下文管理器
|
Java C# 程序员
WPF程序中的弱事件模式
原文:WPF程序中的弱事件模式 在C#中,得益于强大的GC机制,使得我们开发程序变得非常简单,很多时候我们只需要管使用,而并不需要关心什么时候释放资源。但是,GC有的时并不是按照我们所期望的方式工作。 例如,我想实现一个在窗口的标题栏中实时显示当前的时间,一个比较常规的做法如下:     var...
1129 0
|
安全 Windows
服务器sever2008如何取消IE增强安全配置
安装WINDOWS server 系统以后,用浏览器打开网址时,系统总是提示“Internet Explorer 增强安全配置正在阻止下列网站的内容。如果把所有网址添加到信任列表是可以打开网址的,但是用起来很吃力。那么如何解决呢?
148 0
服务器sever2008如何取消IE增强安全配置
SAP 操作,弹出报错 - 已根据规则拒绝服务器触发的操作,是否要查看上个通讯步骤中触发的操作列表 -
SAP 操作,弹出报错 - 已根据规则拒绝服务器触发的操作,是否要查看上个通讯步骤中触发的操作列表 -
SAP 操作,弹出报错 - 已根据规则拒绝服务器触发的操作,是否要查看上个通讯步骤中触发的操作列表 -