Sunday 25 March 2018

Erro cforeforexit c #


Waitforexit c # error
Obter através da App Store Leia esta publicação em nosso aplicativo!
Meu programa preso no Process. WaitForExit ();
meu programa está funcionando bem o tempo todo, mas de repente ficou preso no Process. WaitForExit (); sem avançar para o próximo comando. Eu já executei o programa várias vezes sem ter erro. Alguém sabe como posso depurar isso ou alguém sabe o que está atrasado? Poderia ser um problema com meu python. exe? Obrigado!
Seu programa não imprime nada até o processo sair. Se o processo nunca sair, você nunca verá nada e o problema será impossível de depurar.

Waitforexit c # error
Obter através da App Store Leia esta publicação em nosso aplicativo!
WaitforExit doesn & # 39; t funcionar corretamente.
Então, estou lutando por esse problema por algum tempo agora e tentei muitas maneiras diferentes de corrigi-lo, mas não posso.
Basicamente, o meu aplicativo faz é chamar um arquivo java para carregar um aplicativo em um dispositivo. Enquanto está carregando, ele está imprimindo para uma caixa de 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 2º tenta carregar quais problemas de casos. Eu tentei a espera para a saída, mas se eu fizer isso, então os dados de saída não são escritos na caixa de texto rica. Alguma ideia?
Eu tentei colocar a espera para sair em muitos lugares diferentes, mas isso não parece funcionar.
Dois métodos abaixo escrevem o stdout ou erro no campo richtext.
Qualquer ideia seria excelente. Basicamente eu preciso do processo para sair, então eu posso continuar a pensar que o forloop carrega o próximo arquivo.
Se você WaitForExit, seu aplicativo bloqueia (espera) até o processo sair. Isso significa que não é possível processar qualquer mensagem do Windows em seu segmento UI, portanto, não atualiza a UI.
Você precisa iniciar o processo "em segundo plano" para que sua UI continue atualizando. Isso pode ser feito com:
Inicie e monitore o processo de um segmento separado e passe as informações de progresso de volta para o segmento UI para exibição. Adicione um manipulador de eventos ao evento encerrado pelo processo ou examine periodicamente o sinalizador process. HasExited e use isso para saber quando o primeiro processo acabado. Seu manipulador de eventos iniciaria esse processo e, em seguida, sairá de volta para o loop de aplicativo principal, de modo que ele seja executado normalmente enquanto espera que o processo externo seja concluído.
Sente-se em um loop de espera ocupado até que ele seja concluído e processe os eventos do aplicativo. (Tenha cuidado com isso, pois quaisquer eventos que causem chamadas reentrantes para este código poderiam fazer coisas muito ruins. Geralmente, se você usar essa abordagem, você deve ter certeza de que o resto do seu aplicativo está "bloqueado" em um estado onde o conhece está ocupado aguardando a conclusão de um processo). Isso é efetivamente o que WaitForExit faz, mas também processa eventos de aplicativos, permitindo que a IU permaneça vagamente responsiva:
Talvez eu esteja totalmente errado aqui, mas.
Você precisa ter um espaço após o - jar.
Ou então, Java vai bombardear imediatamente.
Tentando mover a chamada WaitForExit para fora do segmento UI.
Como M. Babcock mencionou, você está mantendo as atualizações na caixa de texto rica.
Uma solução semelhante a esta pode funcionar:
Modifique btnLoad_Click para iniciar um novo tópico que processa a lista (isto vai na contagem> ramo 0)

Waitforexit c # error
Obter através da App Store Leia esta publicação em nosso aplicativo!
Processo WaitForExit ()
Uso as instruções abaixo no meu aplicativo:
Como funciona? Após 15 minutos, se o 'FileName' ainda estiver executando / executando, processará. WaitForExit (900000); matar o processo? Caso contrário, a execução vai para a próxima declaração sem matar o 'FileName', ou seja, 'FileName' continuar a ser executado até que a execução seja completada?
Sim, se um WaitForExit de tempo limitado retorna devido ao limite decorrido, o processo continua a ser executado.
Isso encerrará a janela principal do seu aplicativo e, portanto, terminará sem problemas.

Exemplo de uso.
Resolvi assim:
Eu redirecionava a entrada, a saída e o erro e administrai a leitura dos fluxos de saída e erro. Esta solução funciona para o SDK 7- 8.1, tanto para o Windows 7 como para o Windows 8.
Eu tentei fazer uma aula que resolva seu problema usando a leitura de fluxo assíncrono, levando em conta Mark Byers, Rob, Stevejay responde. Ao fazê-lo, percebi que existe um erro relacionado à leitura assíncrona do fluxo de saída do processo.
Você não pode fazer isso:
Você receberá System. InvalidOperationException: StandardOut não foi redirecionado ou o processo ainda não começou.
Então, você deve iniciar a saída assíncrona lida após o processo ser iniciado:
Fazendo isso, faça uma condição de corrida porque o fluxo de saída pode receber dados antes de configurá-lo como assíncrono:
Então algumas pessoas podem dizer que você só precisa ler o fluxo antes de configurá-lo como assíncrono. Mas o mesmo problema ocorre. Haverá uma condição de corrida entre a leitura síncrona e configurará o fluxo em modo assíncrono.
Não há como conseguir uma leitura assíncrona segura de um fluxo de saída de um processo na forma real "Processo" e "ProcessStartInfo" foi projetado.
Você provavelmente está melhor usando a leitura assíncrona, como sugerido por outros usuários para o seu caso. Mas você deve estar ciente de que você pode perder algumas informações devido à condição de corrida.
Nenhuma das respostas acima está fazendo o trabalho.
A solução Rob trava e a solução 'Mark Byers' obtém a exceção descarta. (Eu tentei as "soluções" das outras respostas).
Então eu decidi sugerir outra solução:
Este código é depurado e funciona perfeitamente.
Eu acho que isso é uma abordagem simples e melhor (não precisamos do AutoResetEvent):
Eu estava tendo o mesmo problema, mas a razão era diferente. No entanto, isso aconteceria no Windows 8, mas não no Windows 7. A seguinte linha parece ter causado o problema.
A solução era NÃO desativar UseShellExecute. Agora recebi uma janela popup do Shell, que é indesejável, mas muito melhor do que o programa esperando que nada de particular aconteça. Então eu adicionei o seguinte trabalho para isso:
Agora, o único problema que me incomoda é o porquê isso está acontecendo no Windows 8, em primeiro lugar.
Introdução.
A resposta atualmente aceita não funciona (lança exceção) e há muitas soluções alternativas, mas nenhum código completo. Isso é, obviamente, desperdiçando muito tempo das pessoas porque esta é uma questão popular.
Combinando a resposta de Mark Byers e a resposta de Karol Tyl, escrevi um código completo baseado em como eu quero usar o método Process. Start.
Eu usei-o para criar um diálogo de progresso em torno dos comandos git. É assim que eu usei isso:
Em teoria, você também pode combinar stdout e stderr, mas não testei isso.
Eu sei que isso é velho, mas, depois de ler toda essa página, nenhuma das soluções estava funcionando para mim, embora eu não tentei Muhammad Rehan porque o código era um pouco difícil de seguir, embora eu acho que ele estava no caminho certo . Quando eu digo que não funcionou, isso não é inteiramente verdade, às vezes funcionaria bem, acho que é algo a ver com a duração da saída antes de uma marca EOF.
De qualquer forma, a solução que funcionou para mim era usar diferentes threads para ler o StandardOutput e StandardError e escrever as mensagens.
Espero que isso ajude alguém, que pensou que isso poderia ser tão difícil!
As outras soluções (incluindo o EM0) ainda estão bloqueadas para o meu aplicativo, devido a tempos de espera internos e ao uso de StandardOutput e StandardError pela aplicação gerada. Aqui está o que funcionou para mim:
Editar: inicialização adicionada de StartInfo para codificar a amostra.
Este post talvez esteja desactualizado, mas descobri a principal causa por que normalmente ele trava é devido ao excesso de pilha para o redirectStandardoutput ou se você tem redirectStandarderror.
Como os dados de saída ou os dados de erro são grandes, isso causará um tempo de espera, pois ele ainda está processando por tempo indefinido.

No comments:

Post a Comment