ID do artigo: 828988 - Última revisão: segunda-feira, 9 de fevereiro de 2004 - Revisão: 1.4 Um aplicativo de console que se baseia em um STA pode atrasar a versão de componentes COM e pode atrasar as chamadas para os métodos Finalize dos objetos que coleta o coletor de lixo
SintomasSe um aplicativo de console que se baseia em um single-threaded apartment (STA) cria e, em seguida, usa componentes STA COM (Component Object Model) e o aplicativo de console não executa operações suficientes para bomba COM mensagens, tais como chamar o método de Monitor.ENTER , o método Thread.Join e outros, os seguintes sintomas podem ocorrer. Além disso, se o aplicativo de console executa operações que executados por um longo tempo e que não bomba mensagens, como chamar o método console.ReadLine , os seguintes sintomas podem ocorrer:
CausaPara fornecer uma chamada para um componente COM STA corretamente, incluindo uma chamada para liberar o componente, o thread no qual o componente foi criado deve ser bombeamento mensagens. Quando o código gerenciado não faz referência a um componente COM, o thread do finalizador deve chamar o método versão do componente. No entanto, se o thread STA onde o componente foi criado não é bombeamento de mensagens, os blocos de chamada o aplicativo até que o thread inicia bombeamento de mensagens novamente. Alguns aplicativos criam muita de componentes COM e objetos que podem ser finalizados. Nesses aplicativos, se o thread do finalizador gasta muito tempo bloqueado enquanto aguarda a STA thread a bomba de mensagens, o thread do finalizador não conseguirá concluir sua atividade. Tanto a lista de COM componentes para lançamento e a lista de objetos gerenciados para finalizar podem aumentar indefinidamente. Se esse problema ocorre, poderá aumentar a quantidade de memória que o processo de aplicativo STA usa longo do tempo. Além disso, qualquer segmento que chama o método GC.WaitForPendingFinalizers pode bloquear indefinidamente. As operações de (E/S) de entrada/saída de arquivo e console do sistema operacional, como ReadFile e WriteFile , não bomba de mensagens. Como console.ReadLine depende a API ReadFile do sistema operacional, console.ReadLine faz ou não bomba de mensagens. Portanto, qualquer segmento que chama console.ReadLine não bomba mensagens durante a chamada. ResoluçãoPara resolver esse problema, use threads MTA em vez de segmentos do STA para criar e para se comunicar com componentes COM em aplicativos de console. Você pode definir o thread principal do aplicativo para um MTA. Para fazer isso, aplique System.MTAThread atributo para o método principal, da seguinte maneira: ReferênciasPara obter mais informações sobre o Microsoft .NET Framework remoting, visite o seguinte site: http://msdn2.microsoft.com/en-us/library/1912sb9w(vs.71).aspx
(http://msdn2.microsoft.com/en-us/library/1912sb9w(vs.71).aspx)
Para obter mais informações sobre coleta de lixo no .NET Framework, visite os seguintes sites:http://msdn.microsoft.com/msdnmag/issues/1100/gci/
(http://msdn.microsoft.com/msdnmag/issues/1100/gci/)
http://msdn.microsoft.com/msdnmag/issues/1200/GCI2/
(http://msdn.microsoft.com/msdnmag/issues/1200/GCI2/)
Para obter informações adicionais sobre bloqueio de chamadas de um componente STA, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft: 291837
(http://support.microsoft.com/kb/291837/
)
INFO: Não fazer chamadas de bloqueio de um componente STA A informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado. Clique aqui para ver a versão em Inglês deste artigo: 828988
(http://support.microsoft.com/kb/828988/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesObtenha Ajuda AgoraTraduções deste artigo
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Voltar para o início