如何在C#中获取显式事件的调用列表

时间:2016-01-16 13:29:12

标签: c# event-handling

我可以使用以下内容定义事件:

public event msg_callback event_PingMessage; 

并获取具有以下内容的事件的调用列表:

MulticastDelegate event_delegate = (MulticastDelegate)this.GetType().GetField(event_name,
                                BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField).GetValue(this);

foreach (var handler in event_delegate.GetInvocationList())
{
    // use handler() here 
}

但是,如果我将event_PingMessage定义为显式事件,例如:

    private msg_callback explicitEvent;
    public event msg_callback event_PingMessage
    {
        add
        {
            explicitEvent += value;
            int i = 0; 

        }
        remove
        {
            explicitEvent -= value;
        }
    }

MulticastDelegate event_delegate = ...行抛出异常:

Object reference not set to an instance of an object.

我如何.GetInvocationList()为我的明确事件?

1 个答案:

答案 0 :(得分:1)

您可以使用explicitEvent.GetInvocationList()explicitEvent相当于GetField(...)调用字段式事件所返回的字段。

相关问题