Wednesday, 11 April 2018

Waitforexit não está funcionando


Então eu tenho lutado contra esse problema por algum tempo agora e tentei muitas maneiras diferentes de consertá-lo, mas não consegui. Bascally que meu aplicativo faz é chama um arquivo java para carregar um aplicativo em um dispositivo. Enquanto carrega sua impressão para uma caixa richtext, então eu gostaria de passar para o próximo arquivo. O problema que estou tendo é que enquanto o primeiro arquivo está sendo carregado, o segundo tenta carregar quais problemas de casos. Eu tentei a espera pela saída, mas se eu fizer isso, os dados de saída não serão gravados na caixa rich text. Qualquer idéia que eu tentei colocar a espera para sair em muitos lugares diferentes, mas parece que não funciona. Dois métodos abaixo escrevem o stdout ou erro para o campo richtext. Qualquer ideia seria ótima. Bascally eu preciso do processo para sair, então eu posso continuar pensando o forloop para carregar o próximo arquivo. Você está recebendo qualquer tipo de mensagem de erro? Parece-me que seus argumentos são - Xmx512M - jar. faltando um espaço após a opção de linha de comando - jar. Isso pode estar causando a saída imediata devido a não ser capaz de entender o comando. Além disso, como M. Babcock sugeriu, mova o método loaddPB para fora do thread da UI e certifique-se de envolver a parte de carregamento em um semáforo, dessa forma apenas um único arquivo é carregado por vez e a UI pode continuar fazendo o que precisa façam. ndash SPFiredrake Feb 9 12 at 15:29 Esteja avisado que isso é um tanto quanto obsceno em que você ainda está bloqueando o thread da UI, mas você está bombeando manualmente os eventos através da fila de mensagens. Esta NÃO é uma prática recomendada e a maioria dos desenvolvedores recomendará isso. A melhor opção é lançar o código de carregamento em um thread separado. ndash SPFiredrake 9 de fevereiro de 12 às 15: 54NET System. Diagnostics. Process Classe 8211 Part 1 Process. WaitForExit e. Exited evento aren8217t trabalhando Eu pensei que tinha encontrado este para ser o caso, mas foi minha culpa, provavelmente o mesmo para você também. Analisarei o que encontrei enquanto explorava e resolvia esse problema. Resposta curta: Se você estiver redirecionando StandardOutput e / ou StandardError, use melhor os métodos assíncronos Process. BeginErrorReadLine () e. BeginOutputReadLine () ANTES de chamar. WaitForExit () e capture a saída enganchando os eventos Process. ErrorDataReceived e. OutputDataReceived. A resposta longa começa comigo usando o arquivo do Visual Studio diffmerge. exe na pasta Common7 / IDE para comparar arquivos de texto no modo de lote. Eu estou introduzindo um teste de regressão em um processo em lote iniciado pela construção. Eu precisava de uma ferramenta que cuspisse um arquivo de diferenças de texto ao comparar dois arquivos (não um arquivo de resultado de mesclagem). WinMerge e Beyond Compare estão à minha disposição, mas eles não parecem produzir nada além de resultados mesclados (que normalmente é o que eu quero, mas não dessa vez). Meu framework de regressão irá chamar diffmerge. exe e armazenar o arquivo diff resultante para revisão posterior. Eu codifiquei meu ProcessStartInfo seguido para iniciar o processo e esperar o processo terminar. e esperando aguarde esperando. Isso me fez ler o MSDN e aprofundar o uso da classe Process. Eu descobri algumas informações interessantes, provavelmente deveria ter sido óbvio. Em primeiro lugar, descobri que, às vezes, executar meu processo filho diffmerge com argumentos diferentes funcionou, às vezes não, tornando o problema misterioso. Segundo, achei que funcionava bem quando não redirecionei a saída. Então, obviamente, eu estava perdendo alguma coisa. Eu precisava ler os documentos da Process API e, assim, encontrei este nugget: Artigo do MSDN Depois de encontrar e ler o artigo do MSDN que eu entendi. Meu exemplo de código acima funcionará se o buffer StdOut ou StdError não estiver cheio. No entanto, o que eu estava vendo foi o buffer StdOut sendo preenchido, o processo filho foi bloqueado na próxima gravação StdOut / StdError, o processo pai estava aguardando infinitamente no processo filho para sair antes de ler o buffer StdOut / StdError. Para mim, parece que o método WaitForExit e / ou o evento Exited estão quebrados / não estão pegando o processo filho, mas foi meu código que foi quebrado. Eu modifiquei o código para usar os métodos assíncronos e, de repente, meus problemas desapareceram. Não há mais bloqueio, tudo funcionou como esperado. Eu usei StringBuilders como buffers para armazenar os dados recebidos nos eventos. Na parte 2, me deparo com um problema com o processo StdOut / StdError ReadLine implementações em torno de minhas necessidades específicas, eu entro em como eu resolvi esse problema. Process. WaitForExit () não está funcionando RSS Process. WaitForExit () não funciona 01 de junho de 2004 07:30 PM 124 MCRen 124 LINK Tenho um formulário ASP. NET que inicia um método assíncrono que faz um loop através de uma lista de arquivos executáveis ​​e inicia-os. No botão click eu chamo meu método assíncrono Meu método tem o seguinte loop Por algum motivo a espera pela saída não parece estar fazendo nada. Esse loop não espera mais nada. Se eu tenho 4 arquivos executáveis ​​quot. vbsquot, todos eles começam praticamente ao mesmo tempo. Qualquer idéia sobre por que isso não parece estar funcionando seria útil. Eu tentei executar isso de dentro de um serviço do Windows e teve o mesmo problema. Eu devo estar esquecendo alguma coisa.

No comments:

Post a Comment