c# - 非公共(public)事件的 EventInfo.AddEventHandler 的替代方法

标签 c# .net reflection

我有一个等待事件发生的类。

我正在使用反射将事件处理程序连接到对象,如下所示:

    public EventMonitor(object eventObject, string eventName)
    {
        _eventObject = eventObject;
        _waitEvent = eventObject.GetType().GetEvent(eventName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic );

        _handler = new EventHandler(SetEvent);
        _waitEvent.AddEventHandler(eventObject, _handler);
    }

一切正常,除了我有一个不公开的事件(它是内部事件并通过 InternalsVisibleToAttribute 暴露给这个测试程序集)。

AddEventHandler 调用失败,显示“无法添加事件处理程序,因为该事件不存在公共(public)添加方法。”

有没有我可以使用的解决方法?

最佳答案

不知道我以前是怎么错过这个方法的,但这是万一其他人遇到同样问题的解决方案

将 AddEventHandler 调用替换为:

var addMethod = _waitEvent.GetAddMethod(true);
addMethod.Invoke(eventObject, new[] {_handler});

关于c# - 非公共(public)事件的 EventInfo.AddEventHandler 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6423694/

相关文章:

c# - ComDefaultInterface 对 COM Callable Wrapper 有什么用处吗?

c# - typeof(myType).TypeHandle 是否使用反射?

c# - 从起点、终点和距离计算坐标

c# - 模拟流以读取字节[]

c# - 我真的需要写这个 "SerializationHelper"吗?

c# - 使用 Action<T> 模拟方法

c# - 从另一个线程唤醒一个线程

c# - 如何动态确定类型是否是使用反射的接口(interface)?

java - 我是否会在使用 PhantomReferences 完成时避免使用反射?

c# - 为什么我不能将 Expression Body 转换为 MethodCallExpression