我有

public delegate void AdministrationEventHandler(object sender, AdministrationEventArgs e);
public static event AdministrationEventHandler MainAdministrationEventHandler;


这是我的wcf服务中的主要事件处理程序。
我也有

private void MyEventHandler(object sender, AdministrationEventArgs e)
{
//code
}


我添加新元素

AdministrationEventHandler userToAddEventHandler = new AdministrationEventHandler(MyEventHandler);


然后

MainAdministrationEventHandler += userToAddEventHandler;


在我的Broadcast()方法中,我向每个处理程序调用MyEventHandler
我想根据Broadcast()参数调用AdministrationEventArgs e

我试图制作类似于MainAdministrationEventHandler的列表,并为该列表的适当元素调用Broadcast(),但是它不起作用。

我正在通过MainAdministrationEventHandler.GetInvocationList()获取所有处理程序

e中获取GetInvocationList()参数后是否可以检查?

或如何以其他方式调用Broadcast()合适的处理程序?

最佳答案

什么是合适的处理程序?因为根据您的代码,您只能将AdministrationEventHandler类型的处理程序分配给该事件。

另外,从GetInvocationList()返回的列表仅包含要调用的处理程序。这次尚未调用它们,您需要调用它们并将e传递给它们。

这样的事情应该做:

AdministrationEventArgs args = new AdministrationEventArgs();
Delegate[] dels = MainAdministrationEventHandler.GetInvocationList();
if (dels != null)
    foreach (Delegate handler in dels)
        handler.Invoke(this, args);

关于c# - 在GetInvocationList()之后获取合适的eventHandler,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8512018/

10-10 20:27