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