【问题标题】:Raise an event in C# [duplicate]在 C# 中引发事件 [重复]
【发布时间】:2010-11-23 14:49:25
【问题描述】:

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

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

就我个人而言,总是使用第二种方法。它工作得很好。谁能告诉我为什么我应该使用第一种方法而不是第二种方法?

【问题讨论】:

    标签: c# events raise


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多