UI停止在WPF应用程序中呈现

Rex*_*dae 7 wpf user-interface rendering

我有一个WPF应用程序,看起来很奇怪.运行一段时间后,UI停止渲染.它根本没有更新,更新的最后一个视图一直显示.鼠标悬停操作不会像通常那样触发复选框和其他项的标记.如果我最小化应用程序并再次恢复它,整个窗口变黑.这不是UI线程被占用的问题,应用程序仍然是响应.例如,如果我右键单击鼠标,则会出现上下文菜单,我可以像往常一样从中选择菜单项.如果该项目显示对话框,则会出现对话框并且表现正常,但底层UI仍未呈现.UI中的所有按钮都是可点击的,即使在UI变黑后它们不可见.将鼠标悬停在附有工具提示的项目上时,弹出工具提示.

当应用程序运行一段时间后,这种情况经常发生.

以前有人见过这种行为吗?什么可以导致它的想法?我该怎么调试呢?我不知道哪里开始.

编辑:当UI冻结时,我运行了Ants Performance Profiler,"%Processor Time"接近 - 有时高于 - 100%.

编辑:事实证明,每次我进入Windows锁定屏幕并再次返回时都会发生这种情况.我不知道为什么会发生这种情况,但它与自定义依赖项属性有关,该属性是为了对SetWindowLong,GetWindowLong和SetWindowPos进行p/invoke调用而实现的.依赖项属性按预期工作,除非从Windows锁定屏幕返回.不使用它是解决问题的"解决方案".

gRe*_*ReX 0

我现在正面临这个问题:-(

经过深入研究,我在使用 BitmapCacheBrush 和 BitmapCache 的新样式中找到了原因。

请参阅此处的重现:https ://github.com/dotnet-campus/wpf-issues/tree/master/BitmapCache

一种快速修复方法是使用计算机范围的注册表设置禁用全局硬件加速:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics\DisableHWAcceleration
Run Code Online (Sandbox Code Playgroud)

/sf/answers/151876021/

或对于特定的 wpf-control/Window

RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
Run Code Online (Sandbox Code Playgroud)

/sf/answers/686200931/

或者只是不使用 BitmapCache。

信用转到: https://weblog.west-wind.com/posts/2017/Feb/13/Video-Rendering-Issues-for-WPF-Windows#workaround-disable-hardware-acceleration