Зависание при запуске приложения WPF

Я пытаюсь отладить приложение .NET 3.5, использующее WPF. На большинстве наших машин приложение запускается нормально, но у нас есть единственный компьютер, на котором приложение зависает на первом .Show(). Кажется, что процесс вращается с полной загрузкой ЦП, и в конечном итоге (если я подключен с отладчиком) я получаю:

Помощник по управляемой отладке «ContextSwitchDeadlock» обнаружил проблему в «D: \ Projects .... \ foobar.exe». Дополнительная информация: CLR не смогла перейти из COM-контекста 0x1aa168 в COM-контекст 0x1a9ff8 в течение 60 секунд. поток, которому принадлежит целевой контекст / квартира, скорее всего, либо выполняет ожидание без перекачки, либо обрабатывает очень длительную операцию без перекачки сообщений Windows. Эта ситуация обычно отрицательно сказывается на производительности и может даже привести к тому, что приложение перестает отвечать или использование памяти постоянно накапливается с течением времени. Чтобы избежать этой проблемы, все потоки однопоточного подразделения (STA) должны использовать примитивы ожидания перекачки (такие как CoWaitForMultipleHandles) и регулярно перекачивать сообщения во время длительных операций.

Приношу извинения за любые ошибки транскрипции, указанные выше, я не могу скопировать и вставить текст.

Система, в которой это происходит, работает под управлением Windows XP SP3. У нас есть другие системы с Windows XP SP3, на которых наше программное обеспечение работает нормально.

Стек вызовов в момент зависания выглядит так:

[Внешний код]
PresentationNative_v0300.dll! FetchRun () + 0x90 байт PresentationNative_v0300.dll!_LsSetParaProperties@24 () + 0x71 байт
PresentationNative_v0300.dll!_LsCreateLineCore@44 () + 0x12c байт
Presentation.dllNative_v0300 ! _LoCreateLine @ 40 () + 0x85 байт foobar.exe! FooBar.Window1.Window1 () Строка 109 + 0x10 байт C # [Внешний код]
user32.dll!_InternalCallWinProc@20 () + 0x28 байт
user32. dll! _UserCallWinProcCheckWow @ 32 () + 0xb7 байтов
user32.dll!_DispatchMessageWorker@8 () + 0xdc байтов
user32.dll!_DispatchMessageW@4 () + 0xf байтов mscoree.dll! __ CorExeMain @ 0 () + 0x32 байтов
mscoree.dll!_ShellShim__CorExeMain@0 () + 0x3a4e байтов
mscoree.dll! __ CorExeMain_Exported @ 0 () + 0x8 байтов
kernel32.dll!_BaseProcessStart@4 () + 0x23 байтов

Есть ли у кого-нибудь идеи, что может вызвать это?

Вскоре я попытаюсь переустановить .NET 3.5, но, честно говоря, мы цепляемся за соломинку.


person pauldoo    schedule 30.08.2010    source источник


Ответы (1)


http://wpfwonderland.wordpress.com/2007/08/16/clr-has-been-unable-to-transition-from-com-context-for-60-seconds/

Это поможет вам не нарушить исполнение. Но вам нужно продолжить профилирование и исправить проблему.

HTH

person Prince Ashitaka    schedule 30.08.2010