Pergunta

Estou aprendendo C# 3.5 e quero saber o que [STAThread] Faz em nossos programas?

Foi útil?

Solução

o STAThreadAttribute é essencialmente um requisito para a bomba de mensagens do Windows se comunicar com os componentes COM. Embora os principais formulários do Windows não usem o COM, muitos componentes do sistema operacional, como as caixas de diálogo do sistema, usam essa tecnologia.

Msdn Explica o motivo com um pouco mais de detalhes:

O StathReadattribute indica que o modelo de rosqueamento COM para o aplicativo é um apartamento de thread único. Este atributo deve estar presente no ponto de entrada de qualquer aplicativo que use os formulários do Windows; Se for omitido, os componentes do Windows podem não funcionar corretamente. Se o atributo não estiver presente, o aplicativo usará o modelo de apartamento multithread, que não é suportado para formulários do Windows.

Esta postagem do blog (Por que o Stathread é necessário?) também explica muito bem o requisito. Se você deseja uma visão mais aprofundada sobre como o modelo de rosqueamento funciona no nível do CLR, veja Este artigo da revista MSDN de junho de 2004 (Arquivado, abril de 2009).

Outras dicas

Ele diz ao compilador que você está em um único modelo de apartamento. Isso é uma coisa maligna, geralmente é usada para o Windows Forms (GUI), pois usa o Win32 para seu desenho, que é implementado como STA. Se você estiver usando algo que é o modelo STA de vários threads, obtém objetos corrompidos.

É por isso que você deve invocar a GUI de outro thread (se você fez algum formulário de codificação).

Basicamente, não se preocupe com isso, apenas aceite que os threads do Windows GUI devem ser marcados como STA, caso contrário, coisas estranhas acontecem.

O StathReadattribute marca um thread para usar o apartamento COM de thread único, se for necessário. Por padrão, o .NET não inicializará com o COM. Somente quando o COM é necessário, como quando um objeto COM ou controle COM é criado ou quando a queda 'n' é necessária, esse COM é inicializado. Quando isso acontece, o .NET chama a função CoinitializeEx subjacente, que leva um sinalizador indicando se deve entrar no thread em um apartamento com vários threads ou thread único.

Leia mais informações aqui (Arquivado, junho de 2009)

e

Por que o Stathread é necessário?

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