2011-02-02 17 views
11

Durante il debug di un'applicazione sto ricevendo il seguente errore.CLR non è stato in grado di passare dal contesto COM 0x3b2d70 al contesto COM

Il CLR non è stato in grado di passare dal contesto COM 0x3b2d70 al contesto COM 0x3b2ee0 per 60 secondi. Il thread che possiede il contesto/l'appartamento di destinazione è più probabile che effettui un'attesa senza pompaggio o che elabori un'operazione molto lunga senza pompare messaggi di Windows. Generalmente, questa situazione ha un impatto negativo sulle prestazioni e può persino portare a un'applicazione non reattiva o all'utilizzo della memoria che si accumula continuamente nel tempo. Per evitare questo problema, tutti i thread a thread singolo apartment (STA) devono utilizzare i primitivi di attesa di pompaggio (come CoWaitForMultipleHandles) e pompare regolarmente i messaggi durante le operazioni a esecuzione prolungata.

Perché il sistema genera questo errore.

+1

Vorrei suggerire di aggiungere più dettagli alla tua domanda, magari pubblicando il codice che causa l'errore. –

risposta

13

ho avuto la soluzione

Necessità di deselezionare ContextSwitchDeadlock sotto Debug-> eccezioni-> Assistenti debug gestiti.

Dopo aver deselezionato ContextSwitchDeadlock non lancia l'errore.

+50

Sì, perché VS ** lo nasconde **. Questo non significa che il problema è sparito! – Odys

+0

@odyodyodys Sono particolarmente contento di non aver nascosto l'eccezione perché il problema che generava un'eccezione causava l'attesa della mia app per 60 secondi durante la schermata iniziale senza un motivo apparente. Non puoi correggere bug che non riesci a trovare. – erodewald

+2

L'unica cosa peggiore del non sapere perché qualcosa è ** non ** lavorare non è sapere perché qualcosa ** è ** funzionante. –

Problemi correlati