弱引用事件WeakEventManager代码参考

弱引用事件WeakEventManager的代码参考

具体方法含义可以查询

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Seller seller = new Seller(); 
            Buyer buyer = new Buyer();
            Buyer1 buyer1 = new Buyer1();

            CustomedWeakEventManager.AddListener(seller, buyer);
            CustomedWeakEventManager.AddListener(seller, buyer1);
         
            seller.Work();
            Console.ReadLine();         
        }      
    }

    public class CustomedEventArgs : EventArgs
    {
        public string Computer { get; set; }
        public string Phone { get; set; }
    }

    public class Seller
    {
        public event EventHandler<CustomedEventArgs> CustomedEvent;
        public void Work()
        {
            CustomedEvent?.Invoke(this, new CustomedEventArgs() { Computer = "Lenovo", Phone = "Lenovo" });
        }
    }

    public class Buyer : IWeakEventListener
    {
        bool IWeakEventListener.ReceiveWeakEvent(Type managerType, object source, EventArgs e)
        {
            CustomedEventArgs args = (CustomedEventArgs)e;
            Console.WriteLine("CustomerA buys a {0} computer and a {1} phone.", args.Computer, args.Phone);
            return true;
        }
    }

    public class Buyer1 : IWeakEventListener
    {
        bool IWeakEventListener.ReceiveWeakEvent(Type managerType, object source, EventArgs e)
        {
            CustomedEventArgs args = (CustomedEventArgs)e;
            Console.WriteLine("CustomerB buys a {0} computer and a {1} phone.", args.Computer, args.Phone);
            return true;
        }
    }

    public class CustomedWeakEventManager : WeakEventManager
    {
       	//将提供的侦听器添加到为托管事件所提供的源中
        public static void AddListener(object source, IWeakEventListener listener)
        {
            CurrentManager.ProtectedAddListener(source, listener);
        }

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

		//返回用于所提供类型的 WeakEventManager 实现
        public static CustomedWeakEventManager CurrentManager
        {
            get
            {
                CustomedWeakEventManager manager = GetCurrentManager(typeof(CustomedWeakEventManager)) as CustomedWeakEventManager;
                if (manager == null)
                {
                    manager = new CustomedWeakEventManager();
                    SetCurrentManager(typeof(CustomedWeakEventManager), manager);
                }

                return manager;
            }
        }

        protected override void StartListening(object source)
        {
            (source as Seller).CustomedEvent += RegisterEvent;
        }

        protected override void StopListening(object source)
        {
            (source as Seller).CustomedEvent -= RegisterEvent;
        }

		//将正在托管的事件传送到每个侦听器。
        public void RegisterEvent(object sender, CustomedEventArgs e)
        {
            DeliverEvent(sender, e);
        }  
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值