【问题标题】:Desktop Composition Is Disabled Error桌面组合被禁用错误
【发布时间】:2013-06-19 22:09: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 并不是很有帮助,所以我希望你们以前见过它们。

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

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

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

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

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

    希望这对以后的人有所帮助。

    【讨论】:

      【解决方案2】:

      第一个错误与您在 WPF 窗口中使用的 Aero Glass 样式有关。当用户关闭 glass 主题(并使用基本主题)时,这些 Glass 方法(如 DwmExtendFrameIntoClientArea)会失败。因此你需要检查Desktop Window Manager (DWM) composition is enabled:

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

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

      【讨论】:

      • 我没有任何特定的 Aero Glass 风格,至少除了默认的 WPF 应用程序之外我没有做过任何事情。据我所见,这是相当明确地完成的,所以我会知道我是否使用玻璃样式......或者这种玻璃样式在 WPF 中是默认的吗?
      • 你确定吗?您是否使用任何特殊的库或组件?该错误清楚地表明问题是由标准 WPF 窗口中未使用的DwmExtendFrameIntoClientArea 引起的。
      • 真正奇怪的是,我可以进入我的系统设置并禁用桌面合成,并且完全无法按需复制。我必须确保在某个地方没有可以使用它的晦涩库。最重要的是,这两个异常通常会一起报告(看到其中一个的用户也会看到另一个)。
      • 您能否提供有关应用程序的上下文/用途/目的以及何时引发异常的更多详细信息?
      • 该应用程序与一些 Web 服务和数据库一起使用,以提供信息的“仪表板”。我还使用 Prism/Unity 使其成为由各种模块组成的复合应用程序。调整窗口大小/移动窗口时似乎发生了崩溃,但似乎是随机的。他们可以整天调整大小,但突然间它会崩溃并且他们无法复制。有时,他们会离开电脑一段时间,回来,调整窗口大小,然后它就崩溃了。调整窗口大小/移动窗口似乎是孤立的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 2016-11-19
      • 1970-01-01
      相关资源
      最近更新 更多