disconnessoContext MDA

Note

Questo articolo è specifico per .NET Framework. Non si applica alle implementazioni più recenti di .NET, tra cui .NET 6 e versioni successive.

L'assistente disconnectedContext al debug gestito viene attivato quando CLR tenta di eseguire la transizione in un apartment o un contesto disconnesso durante la manutenzione di una richiesta relativa a un oggetto COM.

Symptoms

Le chiamate effettuate su un Runtime Callable Wrapper (RCW) vengono recapitate al componente COM sottostante nell'apartment o contesto corrente anziché a quello in cui esistono. Ciò può causare danneggiamento e o perdita di dati se il componente COM non è multithreading, come nel caso di componenti apartment a thread singolo (STA). In alternativa, se l'RCW è un proxy, la chiamata potrebbe comportare la generazione di un COMException oggetto con un HRESULT di RPC_E_WRONG_THREAD.

Cause

L'apartment OLE o il contesto è stato arrestato quando CLR tenta di eseguire la transizione. Questo è più comunemente causato dall'arresto di appartamenti STA prima che tutti i componenti COM di proprietà dell'appartamento siano stati completamente rilasciati Questo può verificarsi a seguito di una chiamata esplicita dal codice utente su un RCW o mentre CLR sta manipolando il componente COM, ad esempio quando CLR rilascia il componente COM quando il RCW associato è stato sottoposto a Garbage Collection.

Risoluzione

Per evitare questo problema, assicurarsi che il thread proprietario di STA non venga terminato prima che l'applicazione abbia terminato con tutti gli oggetti che risiedono nell'appartamento. Lo stesso vale per i contesti; assicurarsi che i contesti non vengano arrestati prima che l'applicazione venga completata completamente con tutti i componenti COM che risiedono all'interno del contesto.

Effetto sul runtime

Questo assistente al debug gestito non ha alcun effetto su CLR. Segnala solo i dati relativi al contesto disconnesso.

Risultato

Segnala il cookie di contesto dell'appartamento o del contesto disconnesso.

Configuration

<mdaConfig>
  <assistants>
    <disconnectedContext />
  </assistants>
</mdaConfig>

Vedere anche