2013-06-19 2 views
4

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

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

ответ

9

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

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

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

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

Надеюсь, это поможет кому-то по дороге.

4

Первая ошибка связана с стилем Aero Glass, который вы используете в своем окне WPF. Когда пользователь отключает тему стекла (и использует основную тему), эти методы 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

+0

У меня нет никакого конкретного стиля Aero Glass, по крайней мере, я не сделал ничего, кроме приложения WPF по умолчанию. Из того, что я видел, это делается довольно четко, поэтому я бы знал, использую ли я стиль стекла ... или по умолчанию этот стиль стекла в WPF? – TrialAndError

+0

Вы уверены? Используете ли вы какие-либо специальные библиотеки или компоненты? Ошибка явно указывает на то, что проблема вызвана 'DwmExtendFrameIntoClientArea', которая не используется в стандартном окне WPF. – dsfgsho

+0

Что действительно странно в том, что я могу зайти в мои настройки системы и отключить композицию рабочего стола и полностью неспособен копировать по требованию. Я должен буду убедиться, что у меня нет какой-то неясной библиотеки где-нибудь, которая могла бы ее использовать. Кроме того, два исключения обычно сообщаются вместе (пользователи видят, что один из них видит и другое). – TrialAndError