Beginoutputreadline Waitforexit Vb




Beginoutputreadline Waitforexit VbMeu objetivo e ler a saida de um processo de linha de comando 7zip em tempo real. Eu codifiquei um leitor de saida assincrono que usa BeginOutputReadLine. Esse metodo deve retornar uma nova linha imediatamente se fosse enviado para saida. Ou, como o MSDN, diz: Quando as operacoes de leitura assincronas comecam, o manipulador de eventos e chamado cada vez que o processo associado grava uma linha de texto em seu fluxo StandardOutput. Este e o meu codigo O problema e que eu nao recebo nenhuma linha ate o processo terminar. Depois disso, toda a saida e retornada para o OutputHandler de fluxo associado. O resultado do meu codigo assincrono e muito parecido com o uso do metodo Synchronous StandardOutput. ReadToEnd. O que estou fazendo errado Eu criei um arquivo em lotes para testar meu codigo com um comando de ping. Isso parece funcionar. O 7zip faz algo estranho com a sua saida. Porque parece que o problema tem algo a ver com a saida do 7zip em vez do codigo que o le. Perguntou 1 de agosto 14 em 13: 37 Tenho problema em ler o resultado de um processo de forma assincrona em C. Encontrei outras questoes similares neste site, mas na verdade nao me ajudam. Aqui esta o que eu faco: Faca novo processo Defina startinfo - FileName, Argumentos, CreateNoWindow (true), UseShellExecute (falso), RedirectStandardOutput (true) Adicione o manipulador de eventos ao processo de saida OutputDataReceived, BeginOutputReadLine e WaitForExit (). Ele funciona bem, mas o resultado do processo iniciado grava alguns por cento () que eu quero obter, mas eu nao posso, pois meu codigo le linha a linha e os percentuais nao aparecem. Aqui esta o codigo atual do meu programa: Process. WaitForExit () aguardara ate que a leitura do fluxo de erro assincrona de saida seja concluida. Infelizmente, isso nao e verdade para a sobrecarga Process. WaitForExit (tempo limite). Isto e o que a classe Process faz internamente: Entao, aguardara as leituras assincronas somente se nao houver tempo limite Para corrigi-lo, basta chamar WaitForExit sem parametros () apos WaitForExit (timeout) retornado true: Existem algumas coisas que estao recebendo no Maneira disso. O aplicativo de console provavelmente esta usando b backspace para substituir a porcentagem, talvez ele nao esteja acendendo o fluxo de stdout apos cada gravacao, e BeginOutputReadLine presumivelmente espera o fim da linha antes de fornecer dados. Veja como voce continua com o processo de leitura. StandardOutput. BaseStream via BeginRead (este codigo nao e assincrono apropriado e o bs precisara processado de forma diferente se voce colocar o progresso em um formulario): respondeu 2 de marco 12 as 13:06 Eu irei ver isso e tente. Ndash Nikolay Dakov 2 de marco 12 as 13:16 respondeu 2 de marco 12 as 12:16 Eu tentei isso, mas mostra a saida quando o processo termina e eu nao consigo obter os percentuais. Ndash Nikolay Dakov 2 de marco 12 as 12:19 Voce pode fornecer algum codigo ndash Onkelborg Mar 2 12 as 12:23 Ja forneci o codigo. Ndash Nikolay Dakov 2 de marco as 12:37 Sua resposta 2017 Stack Exchange, Inc