gpt4 book ai didi

vb.net - 在 VB.NET 中跟踪所有事件

转载 作者:行者123 更新时间:2023-12-02 15:42:00 24 4
gpt4 key购买 nike

我经常遇到这样的情况,我不知道我必须监听什么事件才能在正确的时间执行我的代码。有没有办法获取所有引发的事件的日志?有什么方法可以根据引发事件的对象过滤该日志?

编辑:最终解决方案:

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 事件方法有充分的理由,但在尝试找出要将处理程序添加到哪些方法时,这仍然很有用。

最佳答案

我能想到的唯一方法是使用 Reflection枚举所有事件并连接一个通用处理程序,这将是一个 PITA。

是框架事件的问题吗?如果是这样,Microsoft 在提供事件生命周期/调用顺序方面做得非常好。

编辑

所以这是一个全局事件捕获例程:

Private Sub WireAllEvents(ByVal obj As Object)
'Grab all of the events for the supplied object
Dim Events = obj.GetType().GetEvents()
'This points to the method that we want to invoke each time
Dim HandlerMethod = Me.GetType().GetMethod("GlobalHandler")
'Loop through all of the events
For Each ev In Events
'Wire in a handler for the event
ev.AddEventHandler(obj, [Delegate].CreateDelegate(ev.EventHandlerType, Me, HandlerMethod))
Next
End Sub
Public Sub GlobalHandler(ByVal sender As Object, ByVal e As EventArgs)
'Probably want to do something more meaningful here than just tracing
Trace.WriteLine(e)
End Sub

要连接它,只需调用 WireAllEvents(Me.DataGridView1) 提供您的对象。几乎所有的 MS 事件都使用 sender/e(包括 DataGridView)格式,但如果出于某种原因不是这样,我认为这段代码会出错。但我刚刚使用 DataGridView 和 Form 对其进行了测试,它按预期工作。

关于vb.net - 在 VB.NET 中跟踪所有事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2802774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com