1

我有以下代码试图在运行时附加通用事件处理程序:

EventInfo info = source.GetType().GetEvent("EventWithArgsInheritingFromEventArg");
info.AddEventHandler(source, new EventHandler((obj, args) => DoSomething()));

当我尝试这样做时,我得到以下异常:

“System.EventHandler”类型的对象无法转换为“System.Windows.Controls.DataGridSortingEventHandler”类型。

我的理解是带有签名的方法(对象发送者,EventArgs e)可以处理任何带有从 EventArgs 继承的参数的事件,对吗?

我的方法有什么问题?

谢谢

编辑:这有什么不同吗?会不会发生 DaraGridSortingEventHandler 没有从 EventHandler 继承???

在此处输入图像描述

4

1 回答 1

1

您不能使用该AddEventHandler方法使用不同的委托,但解决方法是先使用以下方法创建委托Delegate.CreateDelegate

EventInfo info = source.GetType().GetEvent("EventWithArgsInheritingFromEventArg");

// create the event handler
var eventhandler = new EventHandler(this.DoSomething);

// create a delegate from the EventHandler
var @delegate = Delegate.CreateDelegate(info.EventHandlerType, null, eventhandler.Method);

info.AddEventHandler(source, @delegate);
于 2013-07-15T11:16:37.133 回答