【发布时间】:2014-07-04 10:05:25
【问题描述】:
我使用以下示例来执行事件:
try
{
if (this.onClientConnected != null)
this.onClientConnected(this, new EventArgs());
}
catch (Exception e)
{
//log and handle exception
}
但这当然有一些缺点,比如如果一个订阅的委托抛出一个异常,其余的将不会被执行,因为我在多线程应用程序中使用它,在检查 null 和抛出有人可以取消订阅的事件之间,会抛出一个 null 异常.
现在我寻找了一种更好的方法来抛出这些事件并想出了这个:
Delegate[] methods = this.onClientConnected.GetInvocationList();
methods.ToList().ForEach(x =>
{
try
{
x.DynamicInvoke(this, new EventReceivedEventArgs(Trigger.TriggerName, Trigger.InstanceID, Trigger.Parameters, Trigger.SourceIpAddress));
}
catch (Exception e)
{
//log and handle exception
}
});
这是一种好方法还是有更好的方法来处理带异常的多线程事件?
【问题讨论】: