desconexoContexto MDA

Note

Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.

O assistente disconnectedContext de depuração gerida (MDA) é ativado quando o CLR tenta fazer a transição para um apartamento ou contexto desligado enquanto serve um pedido relativo a um objeto COM.

Sintomas

As chamadas feitas num Runtime Callable Wrapper (RCW) são entregues ao componente COM subjacente no apartamento ou contexto atual, em vez daquele em que existem. Isto pode causar corrupção e/ou perda de dados se o componente COM não for multithread, como no caso dos componentes single-threaded apartment (STA). Alternativamente, se o RCW for ele próprio um proxy, a chamada pode resultar no lançamento de a COMException com um HRESULT de RPC_E_WRONG_THREAD.

Motivo

O apartamento OLE ou contexto foi encerrado quando o CLR tenta fazer a transição para ele. Isto é mais frequentemente causado pelo encerramento dos apartamentos STA antes de todos os componentes COM pertencentes ao apartamento serem completamente libertados. Isto pode ocorrer como resultado de uma chamada explícita de código de utilizador num RCW ou enquanto o próprio CLR está a manipular o componente COM, por exemplo, quando o CLR está a libertar o componente COM quando o RCW associado foi recolhido pelo lixo.

Resolução

Para evitar este problema, certifique-se de que o thread que detém o STA não termina antes de a aplicação terminar com todos os objetos que vivem no apartamento. O mesmo se aplica aos contextos; garantir que os contextos não são desligados antes de a aplicação estar completamente concluída com quaisquer componentes COM que vivam dentro do contexto.

Efeito no tempo de execução

Este MDA não tem efeito no CLR. Só reporta dados sobre o contexto desconectado.

Output

Reporta o cookie de contexto do apartamento desligado ou do contexto.

Configuração

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

Ver também