WinForms: um objeto COM precisa de um Stathread, o outro precisa de um MTATHRAD. Como posso usá -los?

StackOverflow https://stackoverflow.com/questions/1521816

Pergunta

Estou tentando criar um aplicativo WinForms com dois componentes COM. No entanto, um dos componentes só funciona ao usar [MTAThread] E o outro só trabalha com [STAThread].

Qual seria a solução recomendada?

Foi útil?

Solução

Os formulários do Windows exigem que [StathRead] esteja presente no seu principal ponto de entrada. Funcionará apenas em um estado de apartamento com rosca única. Você pode usar seu objeto STA com no thread da interface do usuário nos formulários do Windows, sem problemas.

A abordagem típica para isso é criar seu próprio tópico e definir o Thread.apartmentState para o MTA (embora este seja o padrão) para o encadeamento separado. Inicialize e use seus componentes COM de thread MTA a partir deste thread.

ThreadStart threadEntryPoint = ...;

var thread = new Thread(threadEntryPoint);
thread.ApartmentState = ApartmentState.MTA;  // set this before you call Start()!
thread.Start();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top