【问题标题】:Alternative to EventInfo.AddEventHandler for non-public event用于非公共事件的 EventInfo.AddEventHandler 的替代方案
【发布时间】:2011-06-21 10:16:53
【问题描述】:

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

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

    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 调用失败并显示“无法添加事件处理程序,因为该事件不存在公共添加方法。”

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

【问题讨论】:

    标签: c# .net reflection


    【解决方案1】:

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

    将 AddEventHandler 调用替换为:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多