Como aguardar até que um aplicativo em shell concluir a usando o Visual C++

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: 307388
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 305368.

Para um Microsoft .NET translation from VPE for Csharp versão deste artigo, consulte 305369.

Este artigo se refere aos seguintes namespaces Microsoft .NET Framework Class Library:
  • System.Diagnostics
  • System.Windows.Forms

NESTA TAREFA

Sumário
Este artigo demonstra como usar a classe do .NET Framework processo para iniciar outro aplicativo do seu código e o código de esperar o outro aplicativo a fechar antes de continuar.

Quando o código espera que o aplicativo para concluir, há duas opções:
  • Espere indefinidamente o outro aplicativo concluir ou ser fechada pelo usuário. - ou -

  • Especificar um período de tempo limite após o qual você pode fechar o aplicativo do seu código.
Este artigo apresenta dois exemplos de código que demonstram as duas abordagens. Além disso, o exemplo de tempo limite pode reconhecer se o outro aplicativo parou de responder e terão as etapas necessárias para fechar o aplicativo.


back to the top

Incluir DLLs

Você deve importar as DLLs para o processo e as classes MessageBox antes de executar os exemplos a seguem. Coloque as linhas de código a seguir logo após as linhas # include :
#using <system.dll>#using <System.Windows.Forms.dll>				
back to the top

Incluir Namespaces

Você também deve importar os namespaces para o processo e as classes de MessageBox . Coloque as linhas de código a seguir após as instruções # using :
using namespace System::Diagnostics;using namespace System::Windows::Forms;				
back to the top

Opção 1: Esperar indefinidamente o aplicativo em shell para concluir

O seguinte código a seguir instrui o shell para abrir o arquivo EULA.txt. O shell abrirá o programa associado ao tipo de arquivo .txt (geralmente bloco de notas Microsoft). O programa aguardará indefinidamente para encerrar o aplicativo.
//How to wait for a shelled application to finish//Get the name of the system folderString* sysFolder=  Environment::GetFolderPath(Environment::SpecialFolder::System);//Create a new ProcessInfo structureProcessStartInfo * pInfo = new ProcessStartInfo();//Set the file name member of the process info structure.pInfo->FileName = String::Concat(sysFolder, S"\\eula.txt");//Start the process.Process* p = Process::Start(pInfo);//Wait for the window to finish loading.p->WaitForInputIdle();//Wait for the process to end.p->WaitForExit();//Console::WriteLine(S"Code continuing...");MessageBox::Show(S"Code continuing...");				
back to the top

Opção 2: Fornecer um tempo limite para o aplicativo em shell

O exemplo de código a seguir define um tempo limite para o aplicativo em shell. O tempo limite para o exemplo é definido como 5 segundos. Convém ajustar esse número (que é calculado em milissegundos) para seus testes.
//Set a time-out value.int timeOut=5000;//Get path to system folder.String* sysFolder=  Environment::GetFolderPath(Environment::SpecialFolder::System);//Create a new process info structure.ProcessStartInfo* pInfo = new ProcessStartInfo();//Set file name to open.pInfo->FileName = String::Concat(sysFolder, S"\\eula.txt");//Start the processProcess* p = Process::Start(pInfo);//Wait for window to finish loading.p->WaitForInputIdle();//Wait for the process to exit or time out.p->WaitForExit(timeOut);//Check to see if the process is still running.if (p->HasExited == false)    //Process is still running.    //Test to see if the process is hung up.    if (p->Responding)  	    //Process was responding; close the main window.   	    p->CloseMainWindow();    else       //Process was not responding; force the process to close.       p->Kill();MessageBox::Show("Code continuing..."); 				
back to the top

Escolhendo entre as duas opções

Pode ser difícil escolher entre essas duas opções. O objetivo principal de um tempo limite é evitar a parada de aplicativo responder ("travar") porque o outro aplicativo parou de responder ("travado"). Tempos limite é mais adequado para um aplicativo em shell que executa o plano de fundo de processamento, no qual o usuário talvez não saiba que o outro aplicativo tenha desativado ou não tem uma maneira conveniente de fechá-lo.

back to the top
Referências
Para obter informações adicionais sobre a classe Process , consulte o seguinte a biblioteca de classe do .NET Framework documentação: Para obter informações adicionais sobre a classe MessageBox , consulte o seguinte a biblioteca de classe do .NET Framework documentação: Para obter informações adicionais sobre como determinar quando um processo em shell termina, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
307011COMO: Determinar quando um processo em shell termina no Visual C++ .NET
Para obter informações mais gerais sobre Visual C++. NET, visite o grupo de notícias Usenet Microsoft seguinte e o Visual C++ .NET Support Center: back to the top

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 307388 - Última Revisão: 12/06/2015 05:25:40 - Revisão: 2.3

Microsoft Visual C++ .NET 2002 Standard Edition, Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual C++ 2005 Express Edition

  • kbnosurvey kbarchive kbmt kbhowtomaster kbnewsgrouplink KB307388 KbMtpt
Comentários