0
我不知道为了在正确的时间执行我的代码,我不知道要收听哪些事件。有什么办法可以记录所有引发的事件吗?根据什么对象引发事件来过滤日志的任何方法?在VB.NET中跟踪所有事件
编辑:最终的解决方案:
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事件方法有很好的理由,但在试图找出要添加处理程序的方法时,这仍然很有用。
是的,这是关于框架事件。例如一个DataGridView有大量不同的事件。他们中的一些人有非常明显的触发器,但同样的动作往往会触发许多事件,有些人的名字不像自我解释。如果我要执行一个动作并获得它触发的所有事件的列表,那么找出我想要处理的事件会容易得多。如果我可以在每个事件中手动检查数据库/数据集,那更好。 – MatsT 2010-05-10 15:04:06
这似乎是做我想做的,除了我还没有弄清楚如何获取实际事件的名称而不是EventArgs的类型。 – MatsT 2010-05-11 13:26:54
我尝试干扰代理委托到接受ev.Name的AddEventHandler方法,但我无法弄清楚语法。我切换到VB10并尝试使用匿名委托,但不会运行。 – 2010-05-11 14:25:44