Partilhar via


MDA disconnectedContext

Nota

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 disconnectedContext assistente de depuração gerenciado (MDA) é ativado quando o CLR tenta fazer a transição para um apartamento ou contexto desconectado enquanto atende a uma solicitação relativa a um objeto COM.

Sintomas

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

Motivo

O apartamento OLE ou contexto foi desligado quando o CLR tenta fazer a transição para ele. Isso é mais comumente causado por apartamentos STA sendo desligados antes que todos os componentes COM de propriedade do apartamento foram completamente liberados Isso pode ocorrer como resultado de uma chamada explícita do código do usuário em um RCW ou enquanto o próprio CLR está manipulando o componente COM, por exemplo, quando o CLR está liberando o componente COM quando o RCW associado foi coletado.

Resolução

Para evitar esse problema, certifique-se de que o thread que possui o STA não termine antes que o aplicativo tenha terminado com todos os objetos que vivem no apartamento. O mesmo se aplica aos contextos; garantir que os contextos não sejam desligados antes que o aplicativo seja completamente concluído com quaisquer componentes COM que vivam dentro do contexto.

Efeito no tempo de execução

Este MDA não tem efeito sobre o CLR. Ele apenas relata dados sobre o contexto desconectado.

Saída

Relata o cookie de contexto do apartamento ou contexto desconectado.

Configuração

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

Consulte também