我有一个WPF应用程序,看起来很奇怪。运行一段时间后,UI停止渲染。它根本没有更新,更新的最后一个视图一直显示。鼠标悬停操作不会像通常那样触发复选框和其他项的标记。如果我最小化应用程序并再次恢复它,整个窗口变黑。这不是UI线程被占用的问题,应用程序仍然是响应。例如,如果我右键单击鼠标,则会出现上下文菜单,我可以像往常一样从中选择菜单项。如果该项目显示对话框,则会出现对话框并且表现正常,但底层UI仍未呈现。 UI中的所有按钮都是可点击的,即使在UI变黑后它们不可见。将鼠标悬停在附有工具提示的项目上时,工具提示会弹出。
当计算机运行一段时间后,这种情况经常发生。
之前有人见过这种行为吗?什么可以导致它的想法?我该怎么调试呢?我不知道哪里开始。
编辑:当用户界面冻结时,我运行了Ants Performance Profiler,“%处理器时间”接近 - 有时高于 - 100%。
编辑:事实证明,每次我进入Windows锁定屏幕并再次返回时都会发生这种情况。我不知道为什么会发生这种情况,但它与自定义依赖项属性有关,该属性是为了对SetWindowLong,GetWindowLong和SetWindowPos进行p / invoke调用而实现的。依赖项属性按预期工作,除非从Windows锁定屏幕返回。不使用它是问题的“解决方案”。
答案 0 :(得分:0)
我现在正面对这个问题:-(
深入研究之后,我发现了一种新样式的原因,该样式使用了带有BitmapCache的BitmapCacheBrush。
在此处查看repro:https://github.com/dotnet-campus/wpf-issues/tree/master/BitmapCache
一种快速修复功能是使用计算机范围的注册表设置禁用全局硬件加速:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics\DisableHWAcceleration
https://stackoverflow.com/a/2169657/1196586
或针对特定的wpf-control / Window
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
https://stackoverflow.com/a/9802870/1196586
或者只是不使用BitmapCache。