在使用事件时,有时 会遇到 事件引发 时,还未添加委托,此时若想该事件订阅者可以响应事件,可采用以下方法:
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:从一个委托的调用列表中移除另一个委托的最后一个调用列表。 委托的-=会调用此方法