WPF:如何确定幻像窗口的来源?

时间:2011-07-13 01:00:46

标签: wpf windows debugging heisenbug

我最近更新了我的应用程序正在使用的第三方库。执行此操作后,启动应用程序将导致创建“幻像”窗口。我可以在屏幕的左上角看到一个空白窗口,然后它变得不可见。此幻像窗口在任务栏中可见。在任务栏中选择此幻像窗口会取消激活我的应用程序窗口。

当我的应用程序窗口处于活动状态时,某些事件(例如滚轮事件)将导致幻像窗口变为活动状态,从而阻止我的应用程序窗口接收事件。

如果我使用任务栏关闭幻像窗口,我的应用程序就会正常运行。

我的猜测是,这可能是第三方图书馆的回归,也可能是我的代码与第三方图书馆之间的互动。

如何确定实例化和/或显示此窗口的代码库中的位置?如果不这样做,我可以在WPF应用程序中迭代所有实例化的窗口,这样我就可以获得有关窗口的更多信息(类型等)。

这是一个奇怪的问题,所以没有答案会被认为太奇怪了!

3 个答案:

答案 0 :(得分:3)

正如其他人可能会指出的那样,SnoopWPF Inspector可能是开始的好地方。它们允许您监视正在运行的WPF应用程序并向下钻取其可视树,因为您这样做,目标应用程序中的UI元素将以红色边框突出显示,以便于识别。

这可能会为您提供有关幻像窗口的详细信息,但它不会告诉您窗口出现的原因

答案 1 :(得分:2)

使用Peter Blois的Snoop应用程序获取窗口的详细信息。

答案 2 :(得分:1)

原来这是因为嵌入了一个加载了Google Chrome Flash插件的浏览器控件。由于某种原因,这种交互导致幻像窗口出现。使用标准(Adobe)Flash插件不会导致出现此窗口。