在GetInvocationList()之后获取合适的eventHandler

时间:2011-12-14 21:37:02

标签: c# wcf delegates event-handling handler

我有

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()方法中,我为每个处理程序调用{​​{1}}。 我想根据MyEventHandler参数调用Broadcast()

我尝试制作类似AdministrationEventArgs e列表的内容,并为此列表的适当元素调用MainAdministrationEventHandler,但它不起作用。

我通过Broadcast()

获取所有处理程序

是否有可能MainAdministrationEventHandler.GetInvocationList()中获取e之后检查GetInvocationList()参数?

我怎么能以其他方式致电Broadcast()给合适的处理程序?

1 个答案:

答案 0 :(得分:3)

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

此外,从GetInvocationList()返回的列表仅包含要调用的处理程序。这次还没有被调用过,你需要调用它们并将e传递给它们。

这样的事情应该做:

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