【问题标题】:In C#, how do I add event handlers to an object based on names?在 C# 中,如何根据名称向对象添加事件处理程序?
【发布时间】:2009-05-12 19:36:17
【问题描述】:

我正在尝试根据一个或多个事件的 name 将事件处理程序添加到“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)
   );

我收到此错误:

绑定到目标方法时出错。

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

【问题讨论】:

    标签: c# .net reflection


    【解决方案1】:

    我用这段代码成功了:

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

    编辑: 添加:eventInfoEventHandlerType.FullName,因此它根据事件处理程序类型更加动态。

    【讨论】:

    • 几乎,我将您的答案与刚刚消失的另一个答案结合起来(使用“myObject”而不是第一个参数)。谢谢你们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    相关资源
    最近更新 更多