9

在我的 .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()

谷歌并不是很有帮助,所以我希望你们以前见过他们。

4

2 回答 2

14

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

这篇文章以及这篇文章帮助我弄清楚了基本上,发生的事情是我有 4 个用户(大约 600 个)遇到了问题。他们还报告说他们的屏幕会随机闪烁,有些人报告说“任务栏变得稳定”。这将是导致 DWM 组合错误的原因,显然,如果他们有多个程序正在运行,这些程序都在密集使用显卡,那么内存就会耗尽。

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

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

希望这对未来的人有所帮助。

于 2013-08-01T19:36:24.363 回答
6

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

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

第二个问题似乎是一个不受管理的错误。在另一个非常相似的问题上检查这个非常详尽的答案:https ://stackoverflow.com/a/1965382/1255010

于 2013-06-19T22:20:34.957 回答