PROBLEMA: A chamada para ExitProcess() de aplicativo do Visual Basic afetam sair do processo

IMPORTANTE: 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: 288216
Sintomas
Se um aplicativo do Visual Basic faz uma chamada direta para a API ExitProcess(), o processo não pode sair corretamente. Em alguns casos, uma chamada para ExitProcess() mesmo irá causar uma violação de acesso ou fazer com que o processo deadlock.

Chamar ExitProcess() de um aplicativo Visual Basic é sem suporte.
Causa
A API ExitProcess() não deve ser chamada por um thread quando outros threads ainda precisam limpar seus próprios recursos. Se houver outros threads em execução que não tenham saído, a rotina ExitProcess() abruptamente terminará-los. Isso pode causar perda de dados e outro comportamento imprevisível.

O mecanismo de tempo de execução do Visual Basic é responsável pela execução de um aplicativo do Visual Basic. Não apenas faz esse mecanismo interpretar e executar o código dentro do aplicativo, mas também inicializa e limpa o processo. Como o mecanismo de-tempo de execução do Visual Basic aloca recursos, somente ele pode saber quando os recursos são liberados. Portanto, somente o mecanismo de execução-tempo pode chamar com segurança ExitProcess().
Resolução
O modo adequado para sair de um aplicativo do Visual Basic é naturalmente exit Sub Main ou descarregar o formulário especificado como o "objeto de inicialização" dentro Project Properties do aplicativo.
Mais Informações
Uma instância específica na qual uma chamada para ExitProcess() é conhecida por causar um problema envolve a objetos COM. Se um aplicativo do Visual Basic tem uma referência pendente para um objeto de COM fora de processo quando chama ExitProcess(), o processo de chamada é provável que "travar" ou causar uma violação de acesso. Uma chamada direta para CoUninitialize() imediatamente antes da chamada para ExitProcess() geralmente irá impedir que esse problema. Embora essa abordagem permite que você solucionar o problema, ele não é recomendado ou suportado pela Microsoft.

A única vantagem que poderia surgir fora do ExitProcess() chamada de um aplicativo Visual Basic é a capacidade para definir um código de saída para o processo. Mas, devido à natureza imprevisível de ExitProcess() chamada a partir do Visual Basic, é melhor para se comunicar o êxito ou falha do processo por outros meios, como gravar um código de saída em um arquivo ou enviar uma mensagem do windows para outro processo.
travar

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 288216 - Última Revisão: 07/14/2004 19:08:19 - Revisão: 5.1

Interface de Programação de Aplicativos do Microsoft Win32, Microsoft Visual Basic 4.0 Professional Edition, Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 4.0 Enterprise Edition, Microsoft Visual Basic 5.0 Enterprise Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0

  • kbmt kbapi kbkernbase kbprb KB288216 KbMtpt
Comentários