C#中触发Event的最佳方式

Posted on 2010-04-11 15:17  wangshijun2010  阅读(790)  评论(0)    收藏  举报

当有多个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)
         {
            // 在这里处理异常
         } 
      }
   }
}

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3