Я бы сказал, что это немного опасная конструкция, потому что она соблазняет вас сделать что-то вроде:
MyEvent(this, EventArgs.Empty);
Если клиент генерирует исключение, сервер отправляется с ним.
Итак, может быть, вы делаете:
try
{
MyEvent(this, EventArgs.Empty);
}
catch
{
}
Но, если у вас несколько подписчиков и один подписчик выдает исключение, что происходит с другими подписчиками?
С этой целью я использовал несколько статических вспомогательных методов, которые выполняют проверку на ноль и поглощают все исключения со стороны подписчика (это из idesign).
// Usage
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
{ }
}
}