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