C# 如何知道所有事件处理程序何时完成执行?

C# 如何知道所有事件处理程序何时完成执行?,c#,events,C#,Events,我正在创建一些测试,其中包括检查与事件关联的方法是否在特定条件下执行。为了检查处理程序是否执行,我添加了一个睡眠(x ms),以确保处理程序在检查结果之前已经完成了执行 有没有办法订阅一些消息,告诉我一个事件的所有处理程序何时完成执行?如果您提前知道处理程序/事件的数量,您可以通过联锁和手动重置事件来实现这一点 在测试开始时,存储处理程序的数量并设置事件: int noOfHandlers = 3; //or however many ManualResetEvent handlersFinis

我正在创建一些测试,其中包括检查与事件关联的方法是否在特定条件下执行。为了检查处理程序是否执行,我添加了一个睡眠(x ms),以确保处理程序在检查结果之前已经完成了执行


有没有办法订阅一些消息,告诉我一个事件的所有处理程序何时完成执行?

如果您提前知道处理程序/事件的数量,您可以通过
联锁
手动重置事件
来实现这一点

在测试开始时,存储处理程序的数量并设置事件:

int noOfHandlers = 3; //or however many
ManualResetEvent handlersFinishedEvent = new ManualResetEvent(false);
然后在事件处理程序方法中:

public void OnEvent(EventArgs e)
{
    // do event stuff
    if (Interlocked.Decrement(ref noOfHandlers) == 0))
    {
        // only the last handler will come in here
        handlersFinishedEvent.Set();
    }
}
然后,测试线程只需等待
手动重置事件
,只有在所有事件完成后才会触发该事件:

handlersFinishedEvent.WaitOne();

事件处理程序按顺序调用。因此,订阅事件本身:您自己的处理程序将在所有已订阅的处理程序之后立即被调用