非公共事件的EventInfo.AddEventHandler的替代项



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

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

    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调用失败,返回"无法添加事件处理程序,因为不存在事件的公共添加方法。"

有没有我可以使用的变通方法?

不知道我以前是怎么错过这个方法的,但如果其他人也有同样的问题,这里有解决方案

将AddEventHandler调用替换为:

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

相关内容

  • 没有找到相关文章

最新更新