2009-09-21 11 views
11

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 
+0

Ho avuto un problema simile, ma non ricordo il contesto. Puoi pubblicare il codice rilevante o uno stacktrace? –

+0

Grazie, ho aggiornato la mia domanda! –

+1

Insetto terribile da avere in WPF 4.0, basta dire '. –

risposta

4

Una soluzione è quella di rendere Visibilità = "Compresso" sul contenuto del popup, invece di chiudere la comparsa, ma è un po 'hacky.

+0

Ben fatto. Grazie. –

1

Ho riscontrato lo stesso problema. Immagino che fosse correlato a un monitor Dell compatibile multitouch collegato al mio computer. quando ho interrotto il servizio di input tablet, le eccezioni di ComException sono scomparse. forse questa è un'opzione anche per te.

1

Ho risolto questo problema disinstallando un tablet Wacom Pen e Touch e disabilitando il servizio di input Tablet. Ho riscontrato questo problema con i popup WPF (TogglePopups, Comboboxes, ecc.) E gli espansori.

Problemi correlati