Одной из моих любимых мозолей при возбуждении событий в C # является тот факт, что исключение в обработчике событий нарушит мой код и, возможно, предотвратит вызов других обработчиков, если аварийный вызов был вызван первым;В большинстве случаев мой код не заботился о том, что чей-то другой код, который прослушивает его события, не работает.
Я создал метод расширения, который перехватывает исключения:
public static void Raise(this EventHandler eh, object sender, EventArgs e)
{
if (eh == null)
return;
try
{
eh(sender, e);
}
catch { }
}
Хотя это действительно означаетМой код выполняется независимо, этот метод не останавливает первый обработчик события, генерирующий исключение и предотвращающий уведомление второго и последующих обработчиков о событии.Я ищу способ итерации через GetInvocationList, чтобы обернуть каждый отдельный обработчик событий в свой собственный try / catch, но это кажется неэффективным, и я не уверен в лучшем способе сделать это, или даже если так и должно быть.
Кроме того, мне действительно неудобно просто игнорировать исключение здесь (и ни FxCop / Resharper в этом отношении);реально что должно случиться с исключением в этом случае?