c# - -event- 只能出现在 += 或 -= 的左侧

标签 c# event-handling

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

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

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/

相关文章:

c# - 如何以编程方式覆盖构建和启动操作?

c# - WP7 上的 FFT 显示两个镜子

c# - 如何将变量限制为一组固定的字符串?

excel - 当 4 个单元格不为空时启用命令按钮

.net - .NET 中的隐藏事件

C# - 当表单失去焦点时如何触发不透明事件?

c# - 在 C# 中从一个字符到另一个字符的子字符串

C#:检查数据库Mysql中的现有记录

php - 异步触发 Magento 事件观察器

javascript - AJAX 处理程序中的 jQuery 单击事件处理程序数据为 'undefined'