如何解决事件引发 先于 事件订阅的问题, 重定义 事件的 +=和-= (添加、移除委托)...

  在使用事件时,有时 会遇到 事件引发 时,还未添加委托,此时若想该事件订阅者可以响应事件,可采用以下方法:   

        public bool IsComplete { get;  set; }
        private EventHandler _completedEventHandler;
        public event EventHandler Completed
        {
            add
            {
                if (this.IsComplete)
                {
                    value(this, EventArgs.Empty);
                }
                else
                {
                    this._completedEventHandler = (EventHandler)Delegate.Combine(this._completedEventHandler, value);
                }
            }
            remove
            {
                this._completedEventHandler = (EventHandler)Delegate.Remove(this._completedEventHandler, value);
            }
        }

Delegate.Combine:将两个委托的调用列表连接在一起。委托的+= 会调用此方法

Delegate.Remove:从一个委托的调用列表中移除另一个委托的最后一个调用列表。 委托的-=会调用此方法

 

转载于:https://www.cnblogs.com/yangfan/archive/2010/01/29/1659149.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值