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

        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:从一个委托的调用列表中移除另一个委托的最后一个调用列表。 委托的-=会调用此方法

 

posted on 2010-01-29 12:56  湛然常寂  阅读(370)  评论(0编辑  收藏  举报