Faz .net interoperabilidade fazer cross-fio de empacotamento para COM ou eu preciso de usar CoMarshalInterThreadInterfaceInStream ou similar?

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

  •  06-09-2019
  •  | 
  •  

Pergunta

Alguém pode me dar uma resposta definitiva sobre se eu preciso usar algo como CoMarshalInterThreadInterfaceInStream, CoGetInterfaceAndReleaseStream ou GlobalInterfaceTable para marshall uma interface COM entre segmentos? Em esta discussão alguns interoperabilidade digamos faz isso por você, alguns dizem que você precisa para usar estas chamadas. Qual é?

Especificamente eu estou usando vários IHTMLxxx objetos de mshtml durante o desenvolvimento de um navegador Helper Object dentro IE. Eu nunca usei métodos como CoMarshalInterThreadInterfaceInStream, e nunca tido conhecimento de quaisquer problemas que isso causou. Mas talvez ele poderia ser a causa de alguns problemas intermitentes un-repetível ...

obrigado.

Foi útil?

Solução

A partir da experiência, se a DLL é carregada como um BHO no IE, então você não precisa fazer qualquer triagem cruz-thread. Parece que .NET faz toda a magia si mesmo.

O que você deve fazer, porém, é garantir que você só usar threads STA para acesso MSHTML objetos. Quaisquer tópicos chegando a um BHO de eventos do IE será automaticamente threads STA, mas se você tiver outros tópicos (por exemplo, temporizadores fundo), então você deve garantir que eles estão STA antes de acessar IE objetos outra pessoa coisas ruins vão acontecer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top