我有一个循环事件。我试图防止将同一方法多次添加到事件中。我已经实现了addremove访问器。

但是,我收到一条错误消息,指出:
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/

10-11 00:30