我有一个循环中的事件。我试图防止将同一方法多次添加到事件中。我已经实现了 add
和 remove
访问器。
但是,我收到一条错误消息:
ItemsProcessed 只能出现在 += 或 -= 的左侧
当我尝试给他们打电话时,即使是在同一个类(class)。
ItemsProcessed(this, new EventArgs()); // Produces error
public event EventHandler ItemsProcessed
{
add
{
ItemsProcessed -= value;
ItemsProcessed += value;
}
remove
{
ItemsProcessed -= value;
}
}
最佳答案
对于显式事件,您需要提供自己的后备存储 - 委托(delegate)字段或类似 EventHandlerList
的内容。当前代码是递归的。尝试:
private EventHandler itemsProcessed;
public event EventHandler ItemsProcessed
{
add
{
itemsProcessed-= value;
itemsProcessed+= value;
}
remove
{
itemsProcessed-= value;
}
}
然后(并注意到我对“即将变为 null
”边缘情况重新线程持谨慎态度):
var snapshot = itemsProcessed;
if(snapshot != null) snapshot(this, EventArgs.Empty);
使用更新的 C# 版本,这可以简化:
itemsProcessed?.Invoke(this, EventArgs.Empty);
关于c# - -event- 只能出现在 += 或 -= 的左侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4496799/