Wednesday 18 October 2017

Standard Output C # Process Waitforexit


Permite ler o que o MSDN diz sobre isso: A sobrecarga WaitForExit () () () é usada para fazer o thread atual aguardar até o processo associado terminar. Este método instrui o componente Processo a aguardar uma quantidade infinita de tempo para que o processo saia. Isso pode fazer com que um aplicativo pare de responder. Por exemplo, se você chamar CloseMainWindow para um processo que tenha uma interface de usuário, a solicitação ao sistema operacional para encerrar o processo associado pode não ser tratada se o processo for gravado para nunca entrar no loop de mensagem. Esta sobrecarga garante que todo o processamento foi concluído, incluindo o tratamento de eventos assíncronos para a saída padrão redirecionada. Você deve usar essa sobrecarga após uma chamada para a sobrecarga WaitForExit (Int32) quando a saída padrão foi redirecionada para manipuladores de eventos assíncronos. Isso é, naturalmente, para. O que faz você pensar que não aguarda que o processo Note termine. Quais são os sinais disso. Qual é a prova sexta-feira, 20 de fevereiro de 2009 8:13 PM Não tenho certeza se isso mudou recentemente, mas de volta no dia aplicações na janela O celular nunca foi realmente fechado quando você bateu o X para fechá-los, eles apenas minimizariam e continuavam funcionando em segundo plano (isso não era um bug, era um recurso, já que na próxima vez que você iniciou o aplicativo, ele começaria muito rápido, yah Eu sei, insano, mas verdadeiro), então, por isso, o WaitForExit talvez esteja se comportando estranhamente e aguardando a inicialização do aplicativo em vez de sair. Mas, novamente, é apenas uma especulação baseada em conhecimentos de versões antigas do Windows Mobile. Sexta-feira, 20 de fevereiro de 2009 11:03 PM Id gostaria de colidir esta questão. Estou no Windows Mobile 6 Standard e estou tentando gerar uma instância de navegador. Gostaria de aguardar até o usuário fechar o navegador. Mas WaitForExit retorna extremamente rápido. Aqui está o código: Processo p novo Processo () p. StartInfo. Argumentos quotexample-sitequot p. StartInfo. Verb quotOpenquot p. StartInfo. UseShellExecute falso p. StartInfo. FileName quotIExplore. exequot p. Start () p. WaitForExit () MessageBox. Show (quotNow o navegador deve ser closedquot) Qual deve ser o caminho certo para obter os resubs esperados Segunda-feira, 08 de junho de 2009 10:45 PM Onde o símbolo é. símbolo. AlexB Terça, 09 de junho de 2009 9:58 PM Estou vendo o mesmo problema, mas no XP. Eu acho que a prova pode ser vista em qualquer depurador (como estou vendo), ou em qualquer aplicativo de console (não necessariamente no celular) quarta-feira, 02 de setembro de 2009 8:35 PM Exceto que você não obtém um objeto de processo que você pode usar. Se você tentar Dim myProc As New Process () myProc Process. Start (quotiexplorequot, quotfinance. yahooqhpsquot symbol) myProc. WaitForExit () Ele ainda retorna imediatamente. Quarta-feira, 02 de setembro de 2009 8:48 PM O problema é que você não está iniciando uma nova instância de iexplore. exe. Você está apenas criando uma nova janela no processo existente. O meu palpite é iexplore. exe começa, vê uma instância anterior e se comunica com a instância anterior para que ela abre a nova janela e, em seguida, a instância que você começou a sair imediatamente. Portanto, o comportamento é correto e esperado. Blog. voidnish quarta-feira, 2 de setembro de 2009 8:52 PM A Microsoft está realizando uma pesquisa on-line para entender sua opinião sobre o site da Msdn. Se você optar por participar, a pesquisa on-line será apresentada quando você deixar o site Msdn. Gostaria de participarHi, estou desenvolvendo um aplicativo de console C que inicia uma linha de comando e obtém alguns dados através de outro comando (o que é irrelevante nesta discussão). Eventualmente, vou obter alguns dados na linha de comando e eu só preciso apenas da última linha disso. Eu usei o seguinte código: Process. StartInfo. FileName quotcmd. exequot Process. StartInfo. RedirectStandardInput true Process. StartInfo. RedirectStandardOutput true Eu usei o Process. StandardInput. WriteLine para escrever os comandos que eu preciso para o console. Mas se Process. StartInfo. RedirectStandardOutput é verdade, não estou obtendo o resultado desejado usando a instrução Process. StandardOutput. ReadToEnd (). Split (n) Enquanto a opção ReadLine está funcionando bem e eu estou recebendo a primeira linha do texto exibido. Uma vez que todas as vezes que os dados que recebo no console difere, não consigo codificar qualquer ação específica de onde obter minha saída. Mesmo que eu coloquei um relógio na declaração Process. StandardOutput. ReadToEnd (). Split (n) Estou recebendo uma exceção de tempo limite de função. Por favor me ajude com esse problema. Quinta-feira, 07 de agosto de 2008 5:44 AM Então copiei o código de Manjus. Myprocesss quotcmd. exequot. Primeiro, enviei o comando quotipconfigquot, com um readToEnd () Timed out. Tentou ler em blocos, também falhou. Tentou waitForInputIddle (), mas esqueceu cmd sem interface gráfica, falhou também. Então eu precisava do cmd para terminar o fluxo se eu quisesse lê-lo. Ok então saia Então eu tentei enviar TODOS OS MEUS COMUNES, INCLUINDO primeiro o comando de saída, depois lendo. SIn. WriteLine (quotipconfigquot) sIn. WriteLine (quotipconfig allquot) sIn. WriteLine (quotexitquot) string strOutPut sOut. ReadToEnd () Funciona como um encanto. Meu ReadToEnd () retorna uma string em meio segundo, e eu obtive todas as informações que eu preciso. -) Isso poderia ser de alguma ajuda para você, Gauri O improvável que fazemos, o impossível demora um pouco mais. - Steven Parker Marcado como resposta por Jack 321 segunda-feira, 11 de agosto de 2008 5:44 AM quinta-feira, 07 de agosto de 2008 7:51 AM ReadToEnd () é capaz de causar impasse, especialmente quando você o codifica após um WaitForExit () ou envia Muita entrada. O processo está escrevendo sua saída para um buffer, esse buffer não é muito grande (2KB, eu acho). Você não lê o conteúdo deste buffer, digamos com o ReadLine (), o processo irá parar, esperando que o buffer seja esvaziado. Seu programa, por sua vez, irá parar, pois o WaitForExit () nunca retornará ou a chamada WriteLine () será interrompida, já que o processo não está mais a ler a entrada. Se esse for seu cenário, você precisará ler de forma assíncrona com BeginOutputReadLine (). Hans Passant. Marcado como resposta por Jack 321 segunda-feira, 11 de agosto de 2008 5:44 AM quinta-feira, 07 de agosto de 2008 12:13 PM Todas as respostas Você também precisa definir Process. StartInfo. UseShellExecute como falso. Marcado como resposta por Jack 321 segunda-feira, 11 de agosto de 2008 5:43 AM O que há acima é uma resposta padrão muito boa, no entanto. Eu não acho que o quotcmdquot termina o fluxo. Não há nada enviado a partir do cmd-box para indicar que o fluxo está encerrado. Considere uma página da Web que você carrega, uma vez que o código html inteiro chegou ao seu PC, o fluxo está pronto. Mesmo com a leitura de um arquivo, uma vez que você alcançou o último personagem, o fluxo está pronto. No entanto, com cmd, o fluxo não é quotdonequot. Ele apenas espera uma nova entrada, então, se você der um outro comando, ele terá a saída novamente. Hmm, eu parece ter problemas para me expressar em inglês novamente, minhas desculpas. De qualquer forma, não penso em nada que você possa fazer para usar ReadToEnd () em um cmd-output-stream, a menos que você envie o comando quotexitquot. Você tentou combinar o readline () com um. Uma análise da linha (ou seja, você obtém linhas vazias) ou b. O comando Process. WaitForIddleInput () O improvável que fazemos, o impossível demora um pouco mais. - Steven Parker quinta-feira, 07 de agosto de 2008 7:35 AM Caso você esteja executando o processo cmd. Relembre-se para escrever quotEXITquot no fluxo de entrada Quinta-feira, 07 de agosto de 2008 7:51 AM Então copiei o código do Manjus. Myprocesss quotcmd. exequot. Primeiro, enviei o comando quotipconfigquot, com um readToEnd () Timed out. Tentou ler em blocos, também falhou. Tentou waitForInputIddle (), mas esqueceu cmd sem interface gráfica, falhou também. Então eu precisava do cmd para terminar o fluxo se eu quisesse lê-lo. Ok então saia Então eu tentei enviar TODOS OS MEUS COMUNES, INCLUINDO primeiro o comando de saída, depois lendo. SIn. WriteLine (quotipconfigquot) sIn. WriteLine (quotipconfig allquot) sIn. WriteLine (quotexitquot) string strOutPut sOut. ReadToEnd () Funciona como um encanto. Meu ReadToEnd () retorna uma string em meio segundo, e eu obtive todas as informações que eu preciso. -) Isso poderia ser de alguma ajuda para você, Gauri O improvável que fazemos, o impossível demora um pouco mais. - Steven Parker Marcado como resposta por Jack 321 segunda-feira, 11 de agosto de 2008 5:44 AM quinta-feira, 07 de agosto de 2008 7:51 AM ReadToEnd () é capaz de causar impasse, especialmente quando você o codifica após um WaitForExit () ou envia Muita entrada. O processo está escrevendo sua saída para um buffer, que o buffer não é muito grande (2KB, eu acho). Você não lê o conteúdo deste buffer, digamos com o ReadLine (), o processo irá parar, esperando que o buffer seja esvaziado. Seu programa, por sua vez, irá parar, pois o WaitForExit () nunca retornará ou a chamada WriteLine () será interrompida, já que o processo não está mais a ler a entrada. Se esse for seu cenário, você precisará ler de forma assíncrona com BeginOutputReadLine (). Hans Passant. Marcado como resposta por Jack 321 segunda-feira, 11 de agosto de 2008 5:44 AM Quinta-feira, 07 de agosto de 2008 12:13 PM A Microsoft está realizando uma pesquisa on-line para entender sua opinião sobre o site da Msdn. Se você optar por participar, a pesquisa on-line será apresentada quando você deixar o site Msdn. Você gostaria de participar

No comments:

Post a Comment