c# - 如何在 C# 中处理多播委托(delegate)中的异常?

标签 c# exception multicastdelegate

我已经获得了一些通过多播委托(delegate)调用的代码。

我想知道我如何 catch 并管理那里提出的任何异常,但目前还没有管理。我无法修改给定的代码。

我一直在四处寻找并发现需要调用 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
   }
}

它单独调用每个将被调用的委托(delegate)

 theEvent.Invoke(sender, eventArg)

快乐编码。


记住在处理事件时执行标准的 null-guard copy'n'check(可能还有锁定)。

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

相关文章:

delphi - Delphi 中的信号和槽实现?

c# - 在 Windows XP 中无法在 msvcrt.dll 中找到点 _except_handler4_common

multithreading - java.lang.IllegalStateException : Not on FX application thread Calling Function

Python 特定键错误除外

Java 的声音 API 不适用于所有 .WAV 文件?

c# - 多播委托(delegate)的返回类型必须为 void。为什么?

c# - `System.MulticastDelegate` 是线程安全的吗?

c# - "Nullable context"实际上做了什么?

c# - 您如何将多个按钮编码到一个方法中?

c# - 为什么 ?? 运算符不能应用于泛型类型,但可以应用 null 检查?