Processstartinfo C # Waitforexit Nao Funciona




Processstartinfo C # Waitforexit Não FuncionaNET System. Diagnostics. Processo Classe 8211 Parte 1 Process. WaitForExit e. Exited evento aren8217t working Eu pensei que eu tinha encontrado este para ser o caso, mas foi minha culpa, provavelmente o mesmo para voce tambem. Eu examinarei o que encontrei ao explorar e solucionar esse problema. Resposta curta: se voce estiver redirecionando o StandardOutput e o StandardError, use os metodos assincronos Process. BeginErrorReadLine () e. BeginOutputReadLine () ANTES de chamar. WaitForExit () e capture a saida conectando os eventos Process. ErrorDataReceived e. OutputDataReceived. A resposta longa comeca comigo usando o Visual Studio diffmerge. exe na pasta Common7IDE para comparar arquivos de texto no modo de lote. Estou apresentando um teste de regressao em um processo de lote iniciado por compilacao. Eu precisava de uma ferramenta que cuspiria um arquivo de diferenca de texto ao comparar dois arquivos (nao um arquivo de resultado de mesclagem). WinMerge e Beyond Compare estao a minha disposicao, mas eles nao parecem produzir nada alem de resultados mesclados (o que normalmente e o que eu quero, mas nao desta vez). Minha estrutura de regressao chamara diffmerge. exe e armazenara o arquivo diff resultante para posterior revisao. Eu codifiquei o meu ProcessStartInfo Seguiu isso com o inicio do processo e aguardando o encerramento do processo. E aguarde espera. Isso me fez ler MSDN e cavando mais fundo no uso da classe Process. Descobri algumas informacoes interessantes, provavelmente deveria ter sido obvio. Primeiro, descobri que, as vezes, funcionava o meu Diferente Processo Infantil com diferentes argumentos trabalhados, as vezes nao fazia, tornando o assunto misterioso. Em segundo lugar, achei que funcionou bem quando nao escrevi a saida de redirecionamento. Entao, obviamente eu estava perdendo alguma coisa. Eu precisava realmente ler os Doccs da API de Processo e, assim, encontrei esse nugget: Artigo do MSDN Depois de encontrar e ler esse artigo do MSDN, entendi. O meu exemplo de codigo acima funcionara se o buffer StdOut ou StdError nao preencher. No entanto, o que eu estava vendo era o buffer StdOut preenchendo, o processo filho foi bloqueado na proxima gravacao StdOutStdError, o processo pai estava esperando infinitamente no processo filho para sair antes de ler o buffer StdOutStdError. Para mim, pareceu que o metodo WaitForExit e o evento Exited estao quebrados, nao apanhando o processo filho, mas era meu codigo que estava quebrado. Eu modifiquei o codigo para usar os metodos assincronos e, de repente, meus problemas desapareceram. Nao ha mais bloqueio, tudo funcionou como esperado. Eu usei StringBuilders como buffers para armazenar os dados recebidos nos eventos. Na parte 2, entrei em um problema com as implementacoes do Process StdOutStdError ReadLine em torno de minhas necessidades especificas, eu entro em como resolvi esse problema. Thread. WaitForExit () nao esta funcionando. Tenho um programa que execute bloco de notas como este: ProcessStartInfo myP new ProcessStartInfo () usando (Processar myp novo Processo ()) myp. StartInfo myP try myp. Start () myp. WaitForExit () Console. WriteLine (alles guttes) catch Console. WriteLine (falha) Isso esta funcionando bem, alles guttes serao Executado depois de fechar o bloco de notas. Mas quando eu mudar o notepad. exe com o software de fornecedor de terceiros que processam arquivos e assim por diante, todos os guttes aparecem diretamente e parece que myp. WaitForExit nao esta funcionando. Eu perdi alguma coisa RE: Thread. WaitForExit () nao esta funcionando obislavu (Programmer) 21 Jan 05 09:27 O metodo WaitForExit () instrui o componente do processo a aguardar o numero especificado de milissegundos ou indefinidamente para que o processo associado saia. Nao tenho certeza do que voce deseja implementar, mas acho que voce deve usar o evento Exitado para capturar o termino do processo: System. Diagnostics. Process myp new System. Diagnostics. Process (). Myp. EnableRaisingEvents true myp. StartInfo. UseShellExecute verificacao falsa se isso for necessario myp. Exited new EventHandler (captureExit) myp. WaitForExit () myp. Start () private void captureExit (remetente de objeto, EventArgs e) System. Diagnostics. Process ps ( System. Diagnostics. Process) smer Combinar isso com objetos Mutex ou Monitor para controlar o segmento atual. (Veja os metodos WaitOne (), WaitAny (), Wait ()). - obislavu - Red Flag Enviado Obrigado por ajudar a manter os Foruns Tek-Tips gratis de postagens inapropriadas. O pessoal da Tek-Tips verificara isso e tomara as medidas apropriadas. Responder a este topico O lancamento nos foruns Tek-Tips e um recurso exclusivo para membros. Clique aqui para participar do Tek-Tips e conversar com outros membros