Threading gerenciado e não gerenciado

Componentes COM usam apartments para sincronizar o acesso aos recursos.Por outro lado, sistema autônomo objetos gerenciado usam regiões sincronizados, primitivos de sincronização, sistema autônomo mutexes, bloqueios e portas de conclusão, e contextos sincronizados para garantir que todos sistema autônomo recursos compartilhados são usados de maneira segura para thread.Para obter informações adicionais sobre o modelo de threading NET, consulte Threads gerenciadas.

Para fins de interoperabilidade, o common linguagem tempo de execução cria e inicializa um apartment ao chamar um objeto COM.Um segmento gerenciado pode criar e inserir um single-threaded apartment (STA) que contém apenas um thread ou um compartimento multissegmentado (MTA) que contém um ou mais segmentos.Quando um compartimento COM e um gerado pelo thread apartment forem compatível, COM permite que o thread de chamada fazer chamadas diretamente para o objeto COM.Se o apartments forem incompatíveis, COM criará um apartment compatível e controla todas as chamadas por meio de um proxy em apartment novo.

O tempo de execução chama CoInitializeEx inicializar apartment com. sistema autônomo um MTA ou um apartamento STA.No .NET estrutura versão 2.0, sistema autônomo threads gerenciados são inicializados sistema autônomo MTA Se não tiver sido seu estado apartment conjunto antes de se iniciar o segmento. Use o SetApartmentState ou TrySetApartmentState método para conjunto o estado de apartment antes de iniciar o thread.

No .NET estrutura versão 2.0, o thread principal do aplicativo é inicializado sistema autônomo MTA a menos que o STAThreadAttribute é aplicada ao procedimento de ponto de entrada.

Observação:

Nas versões do .NET estrutura 1.0 e 1.1, foi possível conjunto o estado de apartment após o segmento estava sendo executado usando o System.Threading.ApartmentState propriedade; isso criou uma condição de corrida. No .NET estrutura versão 2.0, isso não é permitido.

Alguns modelos de programação exigem que você defina o ESTATÍSTICA propriedade em um thread.Por exemplo, para o Windows Forms inicializar sistema autônomo elementos, sistema autônomo arrastar e soltar, crie e insira um apartment single-threaded.

Observação:

Se o proxy e stub nem a biblioteca de tipos estiver registrada, um InvalidCastException pode ocorrer ao chamar um objeto COM do código gerenciado.

A tabela a seguir lista o ApartmentState enumeração valores e mostra a telefonar de inicialização apartment COM comparável.

Valor de enumeração ApartmentState

Inicialização de apartment com.

MTA

CoInitializeEx (nulo, COINIT_MULTITHREADED)

ESTATÍSTICA

CoIntializeEx (nulo, COINIT_APARTMENTTHREADED)

Desconhecido

CoInitializeEx (nulo, COINIT_MULTITHREADED)

Sempre que o objeto COM e o thread gerenciado estão em apartments incompatíveis, todas as chamadas no objeto são feitas por meio de um proxy COM-criado.

Consulte também

Conceitos

Expondo componentes COM para o .NET estrutura

Expondo componentes .NET estrutura para com.

Outros recursos

Interoperabilidade COM avançada