phi*_*131 5 c# debugging wpf events visual-studio-2012
好吧,我找不到任何帮助我的问题和stackoverflow似乎也没有任何东西,或者我不知道如何寻找它(请纠正我,如果我错了,我会关闭这个问题).
在我的程序中,我有一个Grid在代码中定义了一些事件:
public Grid _grid = new Grid();
_grid.MouseLeftButtonDown += new MouseButtonEventHandler(MyMethod);
//and a few more events...
Run Code Online (Sandbox Code Playgroud)
现在在我的程序运行期间,我看到一些奇怪的行为只能来自某些事件,所以我设置了一个断点并停止程序使用调试器.
是否有一个列表,我可以找到列出该成员当前定义的所有事件的列表,_grid以便我可以检查是否还没有删除不需要的事件?
更新2
不幸的是,WPF 中的大多数事件(即 on UIElement)都是通过手动实现add/来实现的,这意味着事件成员只能位于orremove运算符的左侧(即不能“读取”)。内部结构是这样的,每个事件被“委托”给一个事件集合,并且该集合仅包含分配的事件的元素(例如,如果有一个事件集合,那么该事件集合将只有一个条目。不幸的是,事件集合存储的内容表示处理程序是一个内部结构,您必须能够实例化该结构才能查询集合。您无法实例化该结构的实例(FWIW)来查询集合(FWIW)。例如,如果您可以,您可以在 QuickWatch 窗口中查询特定事件的处理程序:-=+=MouseLeftButtonDownEvent += somehandler;RoutedEventHandlerInfoUIElement.EventHandlersStore._entries
grid.EventHandlersStore._entries[
new RoutedEventHandlerInfo(UIElement.MouseLeftButtonDownEvent, false)]
Run Code Online (Sandbox Code Playgroud)
但是,调试器不允许您调用内部构造函数。
没有什么东西只列出事件。您可以在调试器中看到实例的所有成员(监视、快速监视等),并且事件具有不同的图标。然后,您可以展开其中的每一个来查看分配给该事件的方法。例如:

正如您所看到的,已为该特定实例MyEvent“分配”了方法。t_MyEvent
更新: 如果您为一个事件分配了多个事件处理程序,则调试器将仅在快速监视中的事件顶层显示最后分配的方法。要查看分配的所有方法,您需要深入查看调用列表。例如:

..这表明 和t_MyEvent都t_MyEvent2在 的调用列表中MyEvent。如果您没有处理程序,则 的值MyEvent将为null。
| 归档时间: |
|
| 查看次数: |
2498 次 |
| 最近记录: |