已经给了我一些通过多播委托调用的代码。

我想知道我该如何赶上并处理在那里引发的任何异常,而目前尚无法解决。我无法修改给出的代码。

我一直在四处寻找,发现需要调用GetInvocationList(),但不确定是否有帮助。

最佳答案

考虑使用GetInvocationList的代码:

foreach (var handler in theEvent.GetInvocationList().Cast<TheEventHandler>()) {
   // handler is then of the TheEventHandler type
   try {
      handler(sender, ...);
   } catch (Exception ex) {
      // uck
   }
}




以上是我的旧方法,我更喜欢较新的方法,因为它使调用变得很容易,包括使用out / ref参数(如果需要)。

foreach (var singleDelegate in theEvent.GetInvocationList()) {
   try {
      singleDelgate.DynamicInvoke(new object[] { sender, eventArg });
   } catch (Exception ex) {
      // uck
   }
}


分别调用将被调用的每个委托

 theEvent.Invoke(sender, eventArg)


快乐的编码。



在处理事件时,请记住进行标准的空防护复制'n'检查(并可能锁定)。

关于c# - 如何在C#中的多播委托(delegate)中处理异常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9764084/

10-13 03:39