我是WPF的新手,还是C#的新手,现在已经继承了一个C#/ WPF应用程序,包含超过6万行代码(未使用MVVM,设计模式相当简单)。现在,我必须在UI中更改一个很小的东西,但是此控件非常关键,因此紧密地融入了整个解决方案中。我知道Visual Studio中的“实时可视树”功能,也知道实时属性资源管理器。但是,我想使用“ Live EVENT Explorer”之类的东西来查看向此控件的事件注册了哪些方法。我想要一些类似的东西:
a)可以查看当前某个事件(例如ListView的SelectionChanged事件)订阅了哪些方法。我的意思是“当前”,取决于选择了哪些单选按钮和复选框等,订阅的方法正在发生很大变化。因此,我想进行所有需要的选择,然后检查控件并查看哪些方法是订阅了其中一项活动。
b)如果我例如更改控件中的选择,则有可能在此事件触发的第一种方法中立即停止。这样我就可以逐步完成以下所有代码?
你们中有谁知道在Visual Studio中使用内置功能是否可以实现以上任何一种方法,以及如何实现?还是那里有另一个工具可以实现这样的目标?
在大多数情况下,“查找所有引用”应包含此内容,但是当事件不够独特时(想象Button.Click),此操作将失败。
您可以通过在调试器中浏览到事件对象并检查该_invocationList
字段来访问它。如果未填充此字段,请查看该_methodPtr
字段。如果两个字段都为空,则没有人订阅。
_target
是包含订阅方法的对象。如果为null,则将订阅一个静态方法(这会使标识更加棘手)。否则,可以转储目标对象的方法表以找到预订的方法。
在Visual Studio中,调试工具提示使此操作变得容易。对于单播委托,将鼠标悬停在事件上会显示声明类型和方法名称(如果需要,还可以使用Arity):
对于多播,_invocationList
接管:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句