2

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

public event EventHandler<ActionEventArgs> ActionDataReceived;

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

2 回答 2

5

安全的方法是获取处理程序的副本并提高它,即

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

这将减轻可能导致在您尝试引发事件之前未分配事件的竞争条件。


正如@EricLippert 指出的那样,这并不涵盖在分配发生处理程序的内部状态发生变化的情况。

于 2013-05-07T07:41:21.980 回答
0
var temp = ActionDataReceived;
if (temp != null)
      temp();

详细解释可以参考Eric Lippert 的这篇文章。

于 2013-05-07T07:42:55.923 回答