Композиция Рабочего Стола Отключена Ошибка

в моем приложении WPF на .NET 4.0 у меня есть пользователи сообщают о двух ошибках, которые кажутся очень прерывистыми, и я не могу справиться. Ниже я публикую сообщение и самую верхнюю строку трассировки стека. При необходимости я могу опубликовать полную трассировку стека.

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 не очень полезно, поэтому я надеялся, что вы, ребята, видели их раньше.

2 ответов


Я, наконец, смог прибить проблему - драйвер графического адаптера.

этой в должности, при этом один помог мне разобраться. В принципе, у меня было 4 пользователя (из примерно 600), которые испытывали проблемы. Они также сообщили, что их экраны будут мерцать в случайном порядке, а некоторые сообщили, что "панели задач становятся твердыми". Это было бы то, что вызвало ошибку композиции DWM, и, по-видимому, если бы у них было несколько запущенных программ которые интенсивно использовали графическую карту, у нее закончилась бы память.

Я тестировал с помощью Geeks3d.com программа FurMark benchmarking для максимального выхода видеокарты затем запустила мое приложение. Он разобьется при открытии и выбросит исключение outofmemory, поэтому я знаю, что это не утечка памяти.

после обновления драйвера я не смог сгенерировать сбой...даже с несколькими программами и FurMark работает на полную мощность.

надеюсь, это поможет кто-то в будущем.


первая ошибка связана со стилем Aero Glass, который используется в окне WPF. Когда пользователь выключает тему стекла (и использует основную тему), эти методы стекла, такие как DwmExtendFrameIntoClientArea незачет. Поэтому вам нужно проверить, является ли композиция диспетчера окон рабочего стола (DWM) включена:

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

вторая проблема, похоже, является неуправляемой ошибкой. Проверьте этот очень сложный ответ на другой очень похожий вопрос: https://stackoverflow.com/a/1965382/1255010