在C#中,如何根据名称向对象添加事件处理程序?

时间:2009-05-12 19:36:18

标签: c# .net reflection

我正在尝试根据一个或多个事件的名称向'myObject'添加事件处理程序。 'myObject'有一个名为'MyEvent'的事件,我有一个名为'MyEventHandler'的公共事件处理程序(我不需要通过名称获取,但是在下面执行以获取MethodInfo)。

这是我到目前为止所做的:

EventInfo eventInfo = myObject.GetType().GetEvent("MyEvent");
MethodInfo handlerInfo = GetType().GetMethod("MyEventHandler");

if (eventInfo != null && handlerInfo != null)
   eventInfo.AddEventHandler(
      this,
      Delegate.CreateDelegate(eventInfo.EventHandlerType, handlerInfo)
   );

我收到此错误:

  

绑定到目标方法时出错。

我是在正确的轨道上还是有更好的方法?

1 个答案:

答案 0 :(得分:2)

我使用此代码取得了成功:

eventInfo.AddEventHandler(this, Delegate.CreateDelegate(typeof(eventInfo.EventHandlerType.FullName), this, "MyEventHandler"));

编辑: 补充:eventInfoEventHandlerType.FullName所以基于事件处理程序类型它会更加动态。