-event- 只能出现在 += 或 -= 的左侧 [英] -event- can only appear on the left hand side of += or -=

查看:21
本文介绍了-event- 只能出现在 += 或 -= 的左侧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have an event in a loop. I am trying to prevent the same method being added to an event more than once. I've implemented the add and remove accessors.

但是,我收到一条错误消息:

However, I get an error stating that:

ItemsProcessed 只能出现在 += 或 -= 的左侧

当我尝试打电话给他们时,即使在同一个班级.

When I try to call them, even within the same class.

ItemsProcessed(this, new EventArgs()); // Produces error

public event EventHandler ItemsProcessed
{
    add
    {
        ItemsProcessed -= value;
        ItemsProcessed += value;
    }
    remove
    {
        ItemsProcessed -= value;
    }
}

推荐答案

对于显式事件,您需要提供自己的后备存储 - 委托字段或类似 EventHandlerList 的东西.当前代码是递归的.试试:

With an explicit event, you need to provide your own backing store - either a delegate field or something like EventHandlerList. The current code is recursive. Try:

private EventHandler itemsProcessed;
public event EventHandler ItemsProcessed
{
    add
    {
        itemsProcessed-= value;
        itemsProcessed+= value;
    }

    remove
    {
        itemsProcessed-= value;
    }
}

然后(注意到我对即将转为 null"边缘情况重新线程处理持谨慎态度有点):

Then (and noting I'm being a little cautious about the "about to turn null" edge-case re threading):

var snapshot = itemsProcessed;
if(snapshot != null) snapshot(this, EventArgs.Empty);

使用最新的 C# 版本,这可以简化:

With more recent C# versions, this can be simplified:

itemsProcessed?.Invoke(this, EventArgs.Empty);

这篇关于-event- 只能出现在 += 或 -= 的左侧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆