21

我在 Microsoft 实践测试中遇到了这个问题,我很困惑。这是问题:

假设已声明 Alarm 事件、AlarmEventArgs 类和 AlarmEventHandler 委托,以下哪个 C# 代码示例是引发事件的正确方法?

这是他们提供的“正确”答案:

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);
}

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

4

1 回答 1

7

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

于 2009-08-28T04:21:28.620 回答