我有以下代码尝试在运行时附加通用事件处理程序:
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继承???
答案 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);