我不确定这是否是在 C# 中触发事件的方式:
public event EventHandler<ActionEventArgs> ActionDataReceived;
public void showLog(string logMessage)
{
ActionDataReceived(this, new ActionEventArgs(logMessage));
}
我不确定这是否是在 C# 中触发事件的方式:
public event EventHandler<ActionEventArgs> ActionDataReceived;
public void showLog(string logMessage)
{
ActionDataReceived(this, new ActionEventArgs(logMessage));
}
安全的方法是获取处理程序的副本并提高它,即
var handler = ActionDataReceived;
if (handler != null)
{
handler(this, new ActionEventArgs(logMessage));
}
这将减轻可能导致在您尝试引发事件之前未分配事件的竞争条件。
正如@EricLippert 指出的那样,这并不涵盖在分配发生后处理程序的内部状态发生变化的情况。
var temp = ActionDataReceived;
if (temp != null)
temp();
详细解释可以参考Eric Lippert 的这篇文章。