Artigo: 828988 - Última revisão: segunda-feira, 9 de Fevereiro de 2004 - Revisão: 1.4 Uma aplicação de consola que se baseia uma STA pode atrasar a publicação de componentes COM e pode atrasar as chamadas para os métodos Finalize dos objectos que recolhe o recolector de lixo
SintomasSe uma aplicação de consola que se baseia um único-threaded apartment (STA) cria e, em seguida, utiliza componentes STA COM (Component Object Model) e a aplicação de consola não efectua as operações suficientes Bomba mensagens COM, como, por exemplo, chamar o método Monitor.Enter , o método Thread.Join e outros, poderão ocorrer os seguintes sintomas. Além disso, se a aplicação da consola executa as operações que são executados por um longo período de tempo e que não Bomba mensagens, como, por exemplo, chamar o método Console.ReadLine , poderão ocorrer os seguintes sintomas:
CausaPara fornecer uma chamada para um componente COM STA correctamente, incluindo uma chamada para libertar o componente, o thread onde foi criado o componente tem de bombeamento mensagens. Quando o código gerido não referencia um componente COM, o thread de finalizadores tem de chamar o método de versão do componente. No entanto, se o thread STA onde foi criado o componente não é bombeamento mensagens, os blocos de chamada a aplicação até que o thread inicia bombeamento mensagens novamente. Algumas aplicações criam muita COM componentes e objectos que podem ser finalizados. Estas aplicações, se o thread de finalizadores despende muito tempo bloqueado enquanto aguarda a STA thread Bomba mensagens, o thread de finalizadores poderá não conseguir concluir a actividade. Ambos da lista de COM componentes para edição e lista de objectos geridos para finalizar poderão aumentar indefinidamente. Se este problema ocorre, poderá aumentar a quantidade de memória pelo processo do aplicativo STA ao longo do tempo. Além disso, qualquer thread que chama o método GC.WaitForPendingFinalizers pode bloquear indefinidamente. As operações de (es) de entrada/saída de ficheiro e a consola do sistema operativo, tais como ReadFile e WriteFile , não Bomba mensagens. Porque Console.ReadLine depende da API de ReadFile do sistema operativo, Console.ReadLine é ou não Bomba mensagens. Assim, qualquer thread que chama Console.ReadLine não Bomba mensagens durante a chamada. ResoluçãoPara resolver este problema, utilize MTA threads em vez de threads STA para criar e comunicar com componentes COM em aplicações da consola. Pode definir o thread principal da aplicação a um MTA. Para efectuar este procedimento, aplicar System.MTAThread atributo para o método principal, da seguinte forma: classe pública ReferênciasPara obter mais informações sobre o sistema de interacção remota Microsoft .NET Framework, visite o seguinte Web site da Microsoft: 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 a recolha de dados no .NET Framework, visite os seguintes Web sites da Microsoft: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 como bloquear as chamadas a partir de um componente STA, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base: 291837
(http://support.microsoft.com/kb/291837/
)
INFO: Não efectuar chamadas de bloqueios 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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 de Artigos |






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


Voltar ao topo