Попробуйте/поймайте запуск событияC#

Место общения программистов C#
Ответить
Anonymous
 Попробуйте/поймайте запуск события

Сообщение Anonymous »

У меня есть таймер Windows Multimedia, который срабатывает каждые X мс. Каждый тик я делаю какую-то работу. В рамках этого задания может быть запущено событие:

Код: Выделить всё

public event EventHandler SomeEvent;
Но таймеры WinMM запускаются в выделенном системном потоке. Что произойдет, если в одном из обработчиков SomeEvent возникнет исключение? Все приложение выйдет из строя.
Еще одна проблема: что, если у нас есть несколько обработчиков и в первом из них возникло исключение? Все обработчики, кроме первого, будут пропущены.
Поэтому в моем коде я делаю что-то вроде этого:

Код: Выделить всё

var someEvent = SomeEvent;
if (someEvent == null)
return;

foreach (EventHandler handler in someEvent.GetInvocationList())
{
try
{
handler?.Invoke(this, EventArgs.Empty);
}
catch (Exception ex)
{
Console.WriteLine($"Exception in event handler: {ex.Message}");
}
}
Мой вопрос: целесообразно ли использовать такие средства защиты для выполнения обработчиков событий? Или это признак плохого дизайна?


Подробнее здесь: https://stackoverflow.com/questions/798 ... g-an-event
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»