为什么我无法使用EventHandler处理EventHandler <xxx>?</xxx>

时间:2013-07-15 10:30:36

标签: c# .net events delegates

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

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继承???

enter image description here

1 个答案:

答案 0 :(得分: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);