如果您只是调用一个委托,它将按顺序调用所有目标方法。如果您想单独执行它们,则需要使用GetInvocationList
它们 - 例如:
- 每次检查
Cancel
后
- 捕获每个的返回值
- 在单个目标失败后继续
至于使用它的最佳方式:您希望它如何表现?我不清楚......例如,这可能非常适合扩展方法:
static void InvokeIgnoreErrors(this EventHandler handler,
object sender) {
if(handler != null) {
foreach(EventHandler subHandler in handler.GetInvocationList()) {
subHandler(sender, EventArgs.Empty);
}
}
}
然后你可以打电话myHandler.InvokeIgnoreErrors(this);
(例如)。
另一个例子可能是:
static bool InvokeCheckCancel(this CancelEventHandler handler,
object sender) {
if(handler != null) {
CancelEventArgs args = new CancelEventArgs(false);
foreach(CancelEventHandler subHandler in handler.GetInvocationList()) {
subHandler(sender, args);
if(args.Cancel) return true;
}
}
return false;
}
在第一个事件请求取消后停止。