Wpf 如何找到发送给调度程序的确切操作

Wpf 如何找到发送给调度程序的确切操作,wpf,dispatcher,Wpf,Dispatcher,有没有一种方法可以让我们找出哪个UI元素已将操作发布到调度程序队列,该队列最终会引发事件,System.Windows.Threading.Dispatcher.CurrentDispatcher.Hooks.OperationPosted 更新:在调试模式下,一个私有属性DispatcherOperation.Name显示了我在VS鼠标中需要的内容。我只需要将此名称打印到记录器,以用于其他调试目的。是否可以动态提取名称。是的,这是可能的,虽然我给了您一种方法,但我必须警告您,使用反射来获取私有

有没有一种方法可以让我们找出哪个UI元素已将操作发布到调度程序队列,该队列最终会引发事件,
System.Windows.Threading.Dispatcher.CurrentDispatcher.Hooks.OperationPosted


更新:在调试模式下,一个私有属性
DispatcherOperation.Name
显示了我在VS鼠标中需要的内容。我只需要将此名称打印到记录器,以用于其他调试目的。是否可以动态提取
名称

是的,这是可能的,虽然我给了您一种方法,但我必须警告您,使用反射来获取私有或受保护的字段/属性/方法从来都不是一个好主意,因为首先,它们通常是私有的,这是有原因的,其次,如果签名或接口更改,代码可能会中断。但因为您说过这只是为了调试,所以这可能是一个有价值的解决方案

你总是可以用它来做这类事情。首先,需要读取其私有属性的对象的类型和实例。不幸的是,我不知道您要查找的名称是字段还是属性,但整个过程是类似的。首先使用获取属性,然后调用返回的
PropertyInfo
对象。您可能希望缓存PropertyInfo对象以在调试时获得一定的速度。您还需要再次使用正确的代码。我不知道字段/属性是如何描述的,所以我无法给出确切的代码,但从这里应该很容易理解


希望有帮助。

这是一个私有实例属性(=>
GetProperty
),所以需要两个标志:
NonPublic
instance
@dowhilefor,你是对的,我可以使用
type.GetProperty(propName,BindingFlags.NonPublic | BindingFlags.instance)来实现这一点
是的,这纯粹是为了调试目的,只是为了找出是谁让我的XBAP的UI保持忙碌在XP和Win 7上的行为有点不同。最有用的是观察到有私有的
DispatcherOperation.Name
属性本身