在C#中举起一个事件

时间:2009-08-28 04:09:27

标签: c# events raise

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

  

以下哪个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);
}

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

2 个答案:

答案 0 :(得分:14)

我问了一个类似的问题。接受的答案是一个很好的解释。

Checking for null before event dispatching... thread safe?

答案 1 :(得分:7)

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