Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

447
Visualizações
¿CoInitialize() siempre se llama implícitamente en cada subproceso de .Net Framework / .Net Core?

Hay esos [MTAThread] y [STAThread] que controlan el modelo de subprocesos de apartamento para COM en aplicaciones .Net, y desde mi propia prueba (muy limitada), CoInitializeEx() devuelve 1 ( S_FALSE ) si se llama desde el subproceso principal de un aplicación de consola C#.

Según la documentación de Microsoft, S_FALSE significa "La biblioteca COM ya está inicializada en este subproceso".

Lo que me pregunto es si realmente existe una garantía contractual en el propio marco de que COM se inicializará en cada subproceso .Net (Framework o Core application).

Si es así, ¿también se garantiza que todos los subprocesos se inicializarán con el mismo modelo (STA o MTA)?

Lo pregunto porque para las aplicaciones de DirectShow es crucial que COM se inicialice en cada subproceso, y me gustaría evitar salpicar el código con llamadas redundantes a CoInitializeEx() y CoUnitialize() si el marco ya las maneja implícitamente.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

La documentación establece que los subprocesos del grupo de subprocesos administrados son

en el apartamento multiproceso

La documentación de Task.Run() también establece que

Pone en cola el trabajo especificado para que se ejecute en ThreadPool

( ThreadPool en este caso es el grupo de subprocesos administrado).

Finalmente, la documentación para la propiedad obsoleta ApartmentState de la clase Thread establece que

En la versión 2.0 de .NET Framework, los subprocesos nuevos se inicializan como ApartmentState.MTA si su estado de apartamento no se ha establecido antes de que se inicien.

Eso cubre prácticamente todas las formas administradas de crear un hilo.

Por supuesto, también podría colocar un atributo [MTAThread] en su método Main() , pero incluso eso no es necesario porque el valor predeterminado para el punto de entrada principal también es MTA.

Entonces, al final del día, a menos que esté llamando a un código de terceros inusual, puede estar casi seguro de que sus subprocesos serán MTA.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda