首页 > 解决方案 > 多个线程使用相同的事件处理程序

问题描述

我有一个发布事件处理程序的类:

public class X
{
    public event EventHandler<T> someEvent;
}

在构造函数上,我跨越了几个线程。如果出现某些情况,我会在所有这些线程上执行此事件:

someEvent?.Invoke(this, new T()); //T will eventually contain some output data

假设如果多个线程同时调用事件,只要附加的事件处理程序知道如何处理多线程问题,就应该没有问题?例如,如果附加事件使用某种锁定机制或某种并发集合来处理输出数据?还是应该以其他方式处理?

作为后续问题:我是否应该锁定班级对事件的访问权限:

lock(lockingObj)
{
    someEvent?.Invoke(this, new T()); //T will eventually contain some output data
}

或者,如果附加的事件正确处理了这种情况,这不是必需的吗?(我猜如果三个线程同时触发事件,附加的代码也在不同的线程上运行三次)。

标签: c#multithreadingeventhandler

解决方案


推荐阅读