桌面合成被禁用错误

本文关键字:错误 桌面 | 更新日期: 2023-09-27 18:19:02

在我的。net 4.0的WPF应用程序中,我有用户报告了两个似乎非常断断续续的错误,我无法处理。下面,我将发布消息和堆栈跟踪的最上面一行。如果需要,我可以发布完整的堆栈跟踪。

Message:       {Desktop composition is disabled} The operation could not be completed because desktop composition is disabled. (Exception from HRESULT: 0x80263001)
StackTrace:    at Standard.NativeMethods.DwmExtendFrameIntoClientArea(IntPtr hwnd, MARGINS& pMarInset)
Message:       Insufficient memory to continue the execution of the program.
StackTrace:    at System.Windows.Media.Composition.DUCE.Channel.SyncFlush()

Google并不是很有用,所以我希望你们以前见过。

桌面合成被禁用错误

我终于能够确定问题-图形适配器驱动程序。

这篇文章和这篇文章一起帮助我弄清楚了。基本上,发生的事情是,我有4个用户(大约600个)遇到了问题。他们还报告说,他们的屏幕会随机闪烁,一些人报告说"任务栏变硬了"。这可能是导致DWM组合错误的原因,显然,如果他们有多个程序正在运行,并且大量使用显卡,它将耗尽内存。

我使用Geeks3d.com的FurMark基准测试程序进行测试,以最大限度地利用显卡,然后启动我的应用程序。它会在打开时崩溃并抛出抛出内存异常,所以我知道这不是内存泄漏。

更新驱动程序后,我无法生成崩溃…即使有多个程序和FurMark全速运行。

第一个错误与您在WPF窗口中使用的Aero Glass样式有关。当用户关闭glass主题(并使用基本主题)时,这些glass方法(如DwmExtendFrameIntoClientArea)会失败。因此,您需要检查桌面窗口管理器(DWM)组合是否启用:

[DllImport("dwmapi.dll", PreserveSig = false)] 
public static extern bool DwmIsCompositionEnabled(); 

第二个问题似乎是一个未管理的bug。在另一个非常类似的问题上检查这个非常详细的答案:https://stackoverflow.com/a/1965382/1255010