次のようなことをしたくなるので、少し危険な構成だと思います。
MyEvent(this, EventArgs.Empty);
クライアントが例外をスローした場合、サーバーはそれに伴います。
それで、多分あなたはそうします:
try
{
MyEvent(this, EventArgs.Empty);
}
catch
{
}
しかし、複数のサブスクライバーがいて、1つのサブスクライバーが例外をスローした場合、他のサブスクライバーはどうなりますか?
そのために、私はnullチェックを実行し、サブスクライバー側からの例外をすべて飲み込む静的ヘルパーメソッドをいくつか使用しています(これはidesignからのものです)。
EventHelper.Fire(MyEvent, this, EventArgs.Empty);
public static void Fire(EventHandler del, object sender, EventArgs e)
{
UnsafeFire(del, sender, e);
}
private static void UnsafeFire(Delegate del, params object[] args)
{
if (del == null)
{
return;
}
Delegate[] delegates = del.GetInvocationList();
foreach (Delegate sink in delegates)
{
try
{
sink.DynamicInvoke(args);
}
catch
{ }
}
}