我有一个循环事件。我试图防止将同一方法多次添加到事件中。我已经实现了add
和remove
访问器。
但是,我收到一条错误消息,指出:ItemsProcessed can only appear on the left hand side of += or -=
当我尝试给他们打电话时,即使是在同一类也是如此。
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/