Ho un'eccezione molto fastidiosa che blocca la mia applicazione generata da WPF, quando il contenuto di questo popup sembra avere molto elemento. Nella finestra di output vedo circa 50 volte questa eccezione.COMException quando utilizzo un Popup in WPF
'System.Runtime.InteropServices.COMException' si è verificato in UIAutomationProvider.dll
Poi a volte dopo il congelamento ho questa eccezione: è stato rilevato
ContextSwitchDeadlock Messaggio: Il CLR non è stato in grado di transizione dal contesto COM 0x3bd0048 al contesto COM 0x3bd01b8 per 60 secondi. Il filo che possiede il contesto di destinazione/appartamento è più probabile che sia facendo un non pompaggio attendere o l'elaborazione di un un'operazione molto lunga in esecuzione senza il pompaggio di Windows messaggi. In genere, questa situazione ha un impatto negativo sulle prestazioni pari a e può portare l'applicazione a non reattivo o all'utilizzo della memoria che si accumula continuamente nel tempo. Per evitare questo problema, tutti single appartamento filettata (STA) Fili dovrebbe usare le primitive di pompaggio di attesa (come CoWaitForMultipleHandles) e routine pompare messaggi durante la lunga le operazioni in esecuzione.
Non uso alcun componente COM nel mio codice, qualcuno ha già riscontrato questo problema?
Il deadlock viene rilevato dal debugger e non ha stacktrace. L'eccezione stacktrace COM è:
{ "Un evento è riuscito a richiamare uno qualsiasi dei abbonati (Eccezione da HRESULT: 0x80040201)"}
a System.Runtime.InteropServices.Marshal. ThrowExceptionForHRInternal (Int32 errorCode, IntPtr errorInfo)
a MS.Internal.Automation.UiaCoreProviderApi.UiaHostProviderFromHwnd (IntPtr hwnd )
012.
Quando chiamo
popup.IsOpen = true
Ho avuto un problema simile, ma non ricordo il contesto. Puoi pubblicare il codice rilevante o uno stacktrace? –
Grazie, ho aggiornato la mia domanda! –
Insetto terribile da avere in WPF 4.0, basta dire '. –