已经给了我一些通过多播委托调用的代码。
我想知道我该如何赶上并处理在那里引发的任何异常,而目前尚无法解决。我无法修改给出的代码。
我一直在四处寻找,发现需要调用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/