Подтвердить что ты не робот

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

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

Какой из следующих примеров кода С# это правильный способ поднять событие, предполагая, что событие 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);
}

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

4b9b3361

Ответ 2

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