【问题标题】:Getting suitable eventHandler after GetInvocationList()在 GetInvocationList() 之后获取合适的 eventHandler
【发布时间】:2011-12-14 21:37:01
【问题描述】:

我有

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 调用给每个处理程序。 我想根据AdministrationEventArgs e 参数调用Broadcast()

我尝试制作类似MainAdministrationEventHandler 的列表并调用Broadcast() 以获得此列表的适当元素,但它不起作用。

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

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

或者我怎样才能以其他方式调用Broadcast() 给合适的处理程序?

【问题讨论】:

    标签: c# wcf delegates event-handling handler


    【解决方案1】:

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

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

    应该这样做:

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

    【讨论】:

    • 例如我有 3 个不同的 AdministrationEventArgs。每个 AdministrationEventHandler 一个。现在我想在 foreach 循环中看到它们,并在 3 个处理程序中的 2 个上调用。有可能吗?
    • 我认为您可能误解了 .Net 中的事件。这是tutorial。看一下示例 1,OnChanged() 方法。每个事件调用都会获得相同的 AdministrationEventArgs 实例。如果您想根据 AdministrationEventArgs 中的信息做不同的事情,您应该分配 1 个处理程序并在其中放置一条 if 语句。
    • 如果这是您问题的答案,请您这样标记吗?谢谢。
    • 这很复杂 :) 它不能回答我的问题,因为我找到了其他解决方案。但是您针对我的目标是一些直接的,也让我们假设,这是可以接受的答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多