【发布时间】:2010-05-10 13:05:38
【问题描述】:
我经常遇到这样的情况:我不知道必须听什么事件才能在正确的时间执行我的代码。有没有办法获取所有引发的事件的日志?有什么方法可以根据引发事件的对象过滤该日志?
编辑:最终解决方案:
Private Sub WireAllEvents(ByVal obj As Object)
Dim parameterTypes() As Type = {GetType(System.Object), GetType(System.EventArgs)}
Dim Events = obj.GetType().GetEvents()
For Each ev In Events
Dim handler As New DynamicMethod("", Nothing, parameterTypes, GetType(main))
Dim ilgen As ILGenerator = handler.GetILGenerator()
ilgen.EmitWriteLine("Event Name: " + ev.Name)
ilgen.Emit(OpCodes.Ret)
ev.AddEventHandler(obj, handler.CreateDelegate(ev.EventHandlerType))
Next
End Sub
是的,我知道这不是一个好的解决方案,当您真正想做一些触发事件的真实事情时。 1 方法 - 1 事件方法有充分的理由,但在尝试确定要将处理程序添加到哪个方法时,这仍然很有用。
【问题讨论】:
-
这太棒了。谢谢。
标签: vb.net reflection