多个代表,附加,一个失败

时间:2009-05-08 08:44:25

标签: c# .net delegates

我有一个场景,我有多个代表附加到事件(多播委托)。

调用这些方法/代理(如果有的话)的顺序是什么???

如果附带委托的方法之一抛出异常。

  1. 活动是否会停止进一步处理...... ???
  2. 其他方法是否会继续...... ???
  3. 我不清楚如何处理这种情况。

    非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

是的,抛出异常的事件处理程序将停止执行,异常将传播调用堆栈。这意味着任何后续事件处理程序都不会被调用。如果要保证在引发事件的类中调用每个事件处理程序,那么您需要遍历MulticastDelegate中的每个委托,并在try-catch块中单独调用它。当然,简单的解决方案就是在处理程序中捕获任何可能的错误,我想在大多数情况下这是可取的。

答案 1 :(得分:0)

以任何顺序调用多播委托中的方法。 (通常,它们按照它们添加到委托中的顺序被调用。但这并不总是正确的。)因此,程序员不应该依赖于调用顺序。

您需要使用delegatename.GetInvocationList()遍历多播委托中的所有方法,并在循环内使用try catch块来捕获异常并继续下一个方法调用。

请参阅此article,了解如何在确定其他方法的情况下调用其他方法。