在我的.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()
谷歌并没有证明是非常有用的,所以我希望你们之前可能见过它们。
答案 0 :(得分:11)
我终于能够确定问题 - 图形适配器驱动程序。
此post以及此one帮我解决了问题。基本上,发生的事情是我有4个用户(大约600个)遇到了问题。他们还报告说,他们的屏幕会随机闪烁,有些报道“任务栏变得坚固”。这就是导致DWM组合错误的原因,显然如果他们有多个程序正在运行,而这些程序正在大量使用显卡,那么它将耗尽内存。
我测试了使用Geeks3d.com FurMark基准测试程序来最大化显卡然后启动了我的应用程序。它会在打开时崩溃并抛出outofmemory异常,所以我知道这不是内存泄漏。
更新驱动程序后,我无法生成崩溃...即使有多个程序和FurMark全速运行。
希望这可以帮助有人在路上。
答案 1 :(得分:4)
第一个错误与您在WPF窗口中使用的Aero Glass样式有关。当用户关闭玻璃主题(并使用基本主题)时,这些Glass方法(如DwmExtendFrameIntoClientArea
)会失败。因此,您需要检查Desktop Window Manager (DWM) composition is enabled:
[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern bool DwmIsCompositionEnabled();
第二个问题似乎是一个无法管理的bug。在另一个非常相似的问题上查看这个非常精细的答案:https://stackoverflow.com/a/1965382/1255010