[英]calling the other functions when an exception is thrown - C# delegates
如果委托指向 5 个方法,则在调用委托时会在第一个方法中发生异常。 由于发生异常,无法调用 4 个函数的 rest。 即使发生异常,如何让委托调用其他函数
您需要使用Delegate.GetInvocationList
基本上将委托拆分为单独的操作,并使用 catch 子句依次调用每个操作来处理异常。
例如:
Action[] individualActions = (Action[]) multicast.GetInvocationList();
foreach (Action action in individualActions)
{
try
{
action();
}
catch (Exception e)
{
// Log or whatever
}
}
当然,您可能只想捕获特定类型的异常。
您必须在 try/catch 块内自己调用(调用)订阅的处理程序。 您可以使用GetInvocationList()
获取列表。
更好的解决方案需要控制处理程序:它们不应该抛出。
处理异常的粗略代码:
foreach (Delegate handler in myDelegate.GetInvocationList())
{
try
{
object params = ...;
handler.Method.Invoke(handler.Target, params);
}
catch(Exception ex)
{
// use ex
}
}
可能以下代码将帮助您了解如何做到这一点。
public class DynamicInvocation
{
public event EventHandler SomeEvent;
public void DoWork()
{
//Do your actual code here
//...
//...
//fire event here
FireEvent();
}
private void FireEvent()
{
var cache = SomeEvent;
if(cache!=null)
{
Delegate[] invocationList = cache.GetInvocationList();
foreach (Delegate @delegate in invocationList)
{
try
{
@delegate.DynamicInvoke(null);
}
catch
{
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.