我不确定我是否正确理解了这个问题,但我会尝试一下:
如何检查是否有任何事件处理程序附加到事件TestEvent:
TestEvent如果没有附加事件处理程序,则将为 null。
如果附加了一个处理程序(单播委托)_invocationList == 0:
将以下内容粘贴到 QuickWatch 表达式字符串:
((System.Reflection.RuntimeMethodInfo)(((System.Delegate)(TestEvent))._methodBase)).Name
Run Code Online (Sandbox Code Playgroud)
找出附加的事件处理程序。
如果附加了多个处理程序(多播委托)_invocationList > 0:
您需要仔细查看_invocationList,例如检查第一个附加方法:
((System.Reflection.RuntimeMethodInfo)(((System.Delegate)(((object[])(((System.MulticastDelegate)(TestEvent))._invocationList))[0]))._methodBase)).Name
Run Code Online (Sandbox Code Playgroud)
要检查其他附加的处理程序:将索引更改为 1、2 等,或者仅扩展数组的每个元素_invocationList。
除了使用Name仅是处理程序方法名称的属性之外,您还可以使用m_toString作为方法签名的字段。
TestEvent在所有有关替换为您的活动名称的示例中。
[编辑]没有意识到您正在使用 WPF。WPF 事件系统要复杂得多。
假设您有一个按钮,并且要检查是否有任何处理程序附加到MouseLeftButtonDown事件:
button1)。UIElement. 或者快速将其粘贴((System.Windows.UIElement)(button1)).EventHandlersStore到表达式输入中。EventHandlersStore。_entries。_mapStore。[MS.Utility....]_entry0您将看到, _entry1, ...的列表_entry_n。其中每一个都是按钮也分配有处理程序的事件。Value=> _listStore。_entry0您将再次看到, ...的列表_entry1。这些是附加到该特定事件的所有处理程序。
| 归档时间: |
|
| 查看次数: |
1735 次 |
| 最近记录: |