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

本文关键字:事件 调用 列表 获取 | 更新日期: 2023-09-27 18:30:35

我可以用下面定义一个事件:

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()

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

你可以

只使用explicitEvent.GetInvocationList() . explicitEvent 等效于GetField(...)调用类似字段的事件返回的字段。