C# 如何同时调用绑定到事件的所有事件处理程序
几天前,我遇到了一个问题:如何并行调用所有事件处理程序绑定到一个事件 我的问题是:C# 如何同时调用绑定到事件的所有事件处理程序,c#,.net,events,delegates,task-parallel-library,C#,.net,Events,Delegates,Task Parallel Library,几天前,我遇到了一个问题:如何并行调用所有事件处理程序绑定到一个事件 我的问题是: 如何获取绑定到事件的所有事件处理程序的列表 虽然我将调用所有事件处理程序,但没有人能够向该事件添加新的事件处理程序。所以,基本上我需要在调用事件处理程序时获取锁。那么,如何在c#中解决这个问题呢 你是说获取调用列表吗 var handler = MyHandler; if (handler != null) { var invocationList = handler.GetInvocationList(
你是说获取调用列表吗
var handler = MyHandler;
if (handler != null)
{
var invocationList = handler.GetInvocationList();
foreach (EventHandler receiver in invocationList)
receiver.BeginInvoke(this, EventArgs.Empty, null, null);
}
您可以简单地通过在该代码块周围使用lock(\u myLock)
语句来锁定调用
GetInvocationList
EventHandler handler = OnEvent;
if (handler != null)
{
Parallel.ForEach(handler.GetInvocationList(),
del => del.DynamicInvoke(this, EventArgs.Empty));
}