如何安全地触发事件?

时间:2013-05-07 07:39:39

标签: c# event-handling

我不确定这是否是在C#中触发事件的方式:

public event EventHandler<ActionEventArgs> ActionDataReceived;

public void showLog(string logMessage)
{
   ActionDataReceived(this, new ActionEventArgs(logMessage));
}

2 个答案:

答案 0 :(得分:5)

安全的方法是取一个处理程序的副本并提高它,即<。p>

var handler = ActionDataReceived;
if (handler != null)
{
    handler(this, new ActionEventArgs(logMessage));
}

这将缓解可能导致事件在您尝试提升之前被取消分配的竞争条件。


正如@EricLippert指出的那样,涵盖了分配后处理程序的内部状态发生的情况。

答案 1 :(得分:0)

var temp = ActionDataReceived;
if (temp != null)
      temp();

有关详细说明,请参阅this post of Eric Lippert