Поднять событие в C # - PullRequest
       23

Поднять событие в C #

20 голосов
/ 28 августа 2009

Я столкнулся с этим вопросом в практическом тесте Microsoft, и я запутался. Вот вопрос:

Какой из следующих примеров кода C # это правильный способ поднять событие, при условии, что событие Alarm, Класс AlarmEventArgs и AlarmEventHandler делегат был объявлен

Вот «правильный» ответ, который они дали:

AlarmEventArgs e = new AlarmEventArgs(1, 2);
AlarmEventHandler handler = Alarm; 
if (handler != null) 
{ 
    handler(this, e);
}

Однако есть и другой ответ, который кажется правильным.

AlarmEventArgs e = new AlarmEventArgs(1, 2);
if (Alarm!= null) 
{ 
    Alarm (this, e);
}

Лично я всегда использую второй метод. Работает просто отлично. Может кто-нибудь сказать мне, почему я должен использовать первый метод вместо второго?

Ответы [ 2 ]

14 голосов
/ 28 августа 2009

Я задал похожий вопрос. Принятый ответ - хорошее объяснение.

Проверка на нулевое значение перед отправкой события ... Поток безопасно?

7 голосов
/ 28 августа 2009

В многопоточной среде возможно, что обработчик событий может быть обновлен во время отправки вашего события. Чтобы избежать этого сценария, вы назначаете обработчик локальной переменной перед проверкой на нулевое значение и отправкой сообщения.

...