当有多个Subscriber订阅了某个事件, 比如说有3个Subscriber订阅了MailArrived事件, 在触发(邮件到达)事件时, .NET平台会按照顺序来用约定好的参数调用那3个Subscriber, 但是, 如果在调用(Invoke)第1个Subscriber时出现了异常(Exception), 则其他的两个不会得到调用, 为此, 在实际的编码过程中, 我们需要迭代订阅者列表, 然后使用try/catch语句, 从而保证每个订阅者都能得到执行, 即使之前曾出现异常, 实例代码如下:
public void RaiseTheEvent(MyEventArgs eventArgs)
{
MyEventHandler handler = MyEvent;
if (handler != null)
{
Delegate[] eventHandlers = handler.GetInvocationList();
foreach (Delegate currentHandler in eventHandlers)
{
MyEventHandler currentSubscriber = (MyEventHandler)currentHandler;
try
{
currentSubscriber(this, eventArgs);
}
catch (Exception ex)
{
// 在这里处理异常
}
}
}
}
浙公网安备 33010602011771号