用于非公共事件的EventInfo.AddEventHandler的替代方案

Ray*_*Ray 3 .net c# 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);
    }
Run Code Online (Sandbox Code Playgroud)

这一切都很好,除了我有一个非公开的事件(它是内部的,并通过InternalsVisibleToAttribute暴露给这个测试程序集).

AddEventHandler调用失败,"无法添加事件处理程序,因为事件不存在公共添加方法".

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

Ray*_*Ray 11

我不知道我之前是如何错过这个方法的,但是这是解决方案以防其他人遇到同样的问题

将AddEventHandler调用替换为:

var addMethod = _waitEvent.GetAddMethod(true);
addMethod.Invoke(eventObject, new[] {_handler});
Run Code Online (Sandbox Code Playgroud)