【发布时间】:2014-09-19 19:02:41
【问题描述】:
我有一个 WPF 应用程序,它的行为似乎是随机的。运行一段时间后,UI 停止渲染。它根本没有更新,最后更新的视图一直显示。鼠标悬停操作不会像通常那样触发复选框和其他项目的标记。如果我最小化应用程序并再次恢复它,整个窗口就会变黑。这不是 UI 线程被占用的问题,应用程序仍然响应。例如,如果我右键单击鼠标,则会出现上下文菜单,我可以像往常一样从中选择菜单项。如果该项目弹出一个对话框,则该对话框出现并且行为正常,但底层 UI 仍未呈现。 UI 中的所有按钮都是可点击的,即使它们在 UI 变黑后不可见。将鼠标悬停在附有工具提示的项目上时会弹出工具提示。
这种情况经常发生在让应用程序运行一段时间的计算机离开时。
以前有人见过这种行为吗?关于什么可能导致它的任何想法?我该如何调试呢?我什至不知道从哪里开始。
编辑:我在 UI 冻结时运行了 Ants Performance Profiler,“% Processor Time”接近 - 有时高于 - 100%。
编辑:事实证明,每次我进入 Windows 锁定屏幕并再次返回时都会发生这种情况。我不知道为什么会发生这种情况,但它与一个自定义依赖属性有关,该属性是为了对 SetWindowLong、GetWindowLong 和 SetWindowPos 进行 p/invoke 调用而实现的。依赖属性按预期工作,除非从 Windows 锁定屏幕返回。不使用它是问题的“解决方案”。
【问题讨论】:
-
更新你的显卡驱动。
-
您是否附加了内存\性能分析器来观察发生这种情况时内存和处理的情况?
-
关于显卡驱动:重构后出现此问题。非重构版本不显示此行为。这让我得出结论,这是代码的问题,而不是视频驱动程序。
-
我使用 GPU 分析器进行了分析,但它没有给我任何有用的信息。一开始 GPU 负载是 50%,但后来我查看时它只有 15% 左右,而且 UI 仍然没有刷新。
-
@Fls'Zen 这似乎与我的症状非常相似。您可以尝试查找依赖属性和 Win32 API(请参阅问题中的第二个编辑部分)。
标签: wpf user-interface rendering