У меня есть объект (myObject), и я пытаюсь найти все, что прослушивает любое событие этого объекта.
Следующий код работает, как ожидается, для слушателей, созданных с синтаксисом AddHandler; но не сообщает о слушателях, созданных с использованием синтаксиса 'Handles'.
РЕДАКТИРОВАТЬ: Кажется, я был не прав. Этот код работает независимо от синтаксиса AddHandler / Handles; но это только кажется, что работает для пользовательских событий объекта. Если myObject является элементом управления - я никогда не вижу обработчиков событий Load (); но я увижу обработчики для 'MyCustomEvent'.
Может кто-нибудь сказать мне, что мне нужно сделать, чтобы получить эти события?
Public Sub GetListeners(ByVal myObject As Object)
Dim myType As Type = myObject.GetType
Dim myFieldList As FieldInfo() = myType.GetFields(BindingFlags.Static Or BindingFlags.Instance Or BindingFlags.NonPublic)
For Each myInfo In myFieldList
Dim myDelegate As [Delegate] = TryCast(myInfo.GetValue(myObject), [Delegate])
If myDelegate IsNot Nothing Then
For Each myItem In myDelegate.GetInvocationList
System.Diagnostics.Debug.WriteLine(myDelegate.GetInvocationList(0).Method.Name & "-->" & myDelegate.GetInvocationList(0).Method.DeclaringType.FullName)
Next
End If
Try
Dim eventList As EventHandlerList = DirectCast(myObject.GetType().GetProperty("Events", _
(BindingFlags.FlattenHierarchy Or (BindingFlags.NonPublic Or BindingFlags.Instance))).GetValue(myObject, Nothing), EventHandlerList)
myDelegate = eventList(myInfo.GetValue(myObject))
Catch ex As Exception
End Try
If myDelegate IsNot Nothing Then
For Each myItem In myDelegate.GetInvocationList
System.Diagnostics.Debug.WriteLine(myDelegate.GetInvocationList(0).Method.Name & "-->" & myDelegate.GetInvocationList(0).Method.DeclaringType.FullName)
Next
End If
Next
End Sub