我有一个场景,我有多个代表附加到事件(多播委托)。
调用这些方法/代理(如果有的话)的顺序是什么???
如果附带委托的方法之一抛出异常。
我不清楚如何处理这种情况。
非常感谢任何帮助。
答案 0 :(得分:4)
是的,抛出异常的事件处理程序将停止执行,异常将传播调用堆栈。这意味着任何后续事件处理程序都不会被调用。如果要保证在引发事件的类中调用每个事件处理程序,那么您需要遍历MulticastDelegate
中的每个委托,并在try-catch块中单独调用它。当然,简单的解决方案就是在处理程序中捕获任何可能的错误,我想在大多数情况下这是可取的。
答案 1 :(得分:0)
以任何顺序调用多播委托中的方法。 (通常,它们按照它们添加到委托中的顺序被调用。但这并不总是正确的。)因此,程序员不应该依赖于调用顺序。
您需要使用delegatename.GetInvocationList()遍历多播委托中的所有方法,并在循环内使用try catch块来捕获异常并继续下一个方法调用。
请参阅此article,了解如何在确定其他方法的情况下调用其他方法。