在C#中引发事件

21

我在微软实践考试中遇到了这个问题,感到困惑。以下是问题:

 

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

个人而言,我总是使用第二种方法。它完全可以正常工作。请问有人能告诉我为什么我应该使用第一种方法而不是第二种方法吗?

1个回答

7

在多线程环境下,当你的事件正在被分派时,事件处理程序可能会被更新。为了避免这种情况,你可以在检查 null 并分派消息之前将处理程序分配给一个本地变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接