如何在 C# 中获取显式事件的调用列表
How to get invocation list of an explicit event in C#
我可以使用以下内容定义一个事件:
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()
我的露骨事件?
您可以直接使用 explicitEvent.GetInvocationList()
。 explicitEvent
相当于您对 field-like 事件的 GetField(...)
调用返回的字段。
我可以使用以下内容定义一个事件:
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()
我的露骨事件?
您可以直接使用 explicitEvent.GetInvocationList()
。 explicitEvent
相当于您对 field-like 事件的 GetField(...)
调用返回的字段。