C# 用C语言提出一个事件#

C# 用C语言提出一个事件#,c#,events,raise,C#,Events,Raise,我在微软的一次实践测试中遇到了这个问题,我感到困惑。问题是: 以下哪个C#代码示例 是举办活动的正确方式, 假设报警事件 AlarmEventArgs类,以及 AlarmEventHandler委托已被删除 声明 以下是他们提供的“正确”答案: AlarmEventArgs e = new AlarmEventArgs(1, 2); AlarmEventHandler handler = Alarm; if (handler != null) { handler(this, e);

我在微软的一次实践测试中遇到了这个问题,我感到困惑。问题是:

以下哪个C#代码示例 是举办活动的正确方式, 假设报警事件 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);
}

我个人总是使用第二种方法。它很好用。有人能告诉我为什么我应该使用第一种方法而不是第二种方法吗?

在多线程环境中,事件处理程序可能会在调度事件时更新。为了避免这种情况,在检查null和分派消息之前,将处理程序分配给一个局部变量