Espere por um método


Agora eu estou trabalhando em um aplicativo Console Runner que tem o seguinte código para a saída do log e esperar até que o processo é concluído: Eu tenho duas perguntas sobre este pedaço de código. Notei que se o processo demora mais de 30 segundos, a chamada p. ExitCode bombas. O que acontece se o meu processo demora apenas 1 segundo, vai esperar 30 segundos de qualquer maneira ou o processo será aconselhado pelo CLR pediu Feb 5 14 at 12:40 Eles escondem esses segredos na documentação: se você tentar obter o ExitCode antes do Processo foi encerrado, a tentativa lança uma exceção. Examine primeiro a propriedade HasExited para verificar se o processo associado terminou. Quot e quotWaitForExit. E bloqueia o segmento atual de execução até que o tempo tenha decorrido ou o processo tenha exitedquot ndash Alex K. Feb 5 14 at 12:44 Eu achei isso também, mas eu wasn39t certeza que eu li corretamente. Então, parece que se o processo sair antes do timestamp dentro do WaitForExit não há problemas, mas o contrário causa uma exceção agradável. Obrigado ndash Raffaeu Feb 5 14 at 12: 49WaitForExit () é um método de bloqueio de thread Esta é exatamente a causa do problema. Se WaitForExit é chamado a partir do thread de formulários, irá impedir o formulário de ser redesenhado. Arrastar algo na frente de uma janela bloqueada deixa um traço da janela arrastada. Sugerido como resposta por ahmedilyas Moderador quinta-feira, 28 de julho de 2017 10:34 Marcado como resposta por Jackie-Sun Moderador segunda-feira, 08 de agosto de 2017 6:50 quinta-feira, 28 de julho de 2017 10:18 Código seria melhor e isso Também seria melhor se você puder nos dizer exatamente o que você está tentando alcançar. O WaitForExit () simplesmente aguarda (bloqueia seu código para essa duração) para um processo para sair antes de continuar com a execução de seu código de chamada. C MVP (2007-2010) MS Vendor - MS Todo o caminho Seguidor desde 1995 MS Super Evangelista MSDN Moderador dos Fóruns Proposto como resposta por ahmedilyas Moderador quinta-feira, 28 de julho de 2017 10:33 Marcado como resposta por Jackie-Sun Moderador segunda-feira, agosto 08, 2017 6:50 AM quinta-feira, 28 de julho de 2017 9:57 AM Todas as respostas Eu acho que isso não tem relação com waitforexit função. Qual forma você está arrastando. Primeira forma exe ou segunda forma exe. Um pequeno código é apreciado, marcar o meu post como resposta se o meu post foi útil para você quinta-feira, 28 de julho de 2017 09:52 Código seria melhor e também seria melhor se você puder nos dizer exatamente o que você está tentando alcançar . O WaitForExit () simplesmente aguarda (bloqueia seu código para essa duração) para um processo para sair antes de continuar com a execução de seu código de chamada. C MVP (2007-2010) MS Vendor - MS Todo o caminho Seguidor desde 1995 MS Super Evangelista MSDN Moderador dos Fóruns Proposto como resposta por ahmedilyas Moderador quinta-feira, 28 de julho de 2017 10:33 Marcado como resposta por Jackie-Sun Moderador segunda-feira, agosto 08, 2017 6:50 AM quinta-feira, julho 28, 2017 9:57 AM eu tinha checked. it tem problema em waitforexit () only. i notado que o problema quando se move segunda forma exe Editado por RAJ KUMAR. R quinta-feira, 28 de julho, 2017 10:09 AM quinta-feira, 28 de julho de 2017 10:02 o que exatamente é o problema que você leu minha resposta você também leu o link que eu tinha fornecido WaitForExit () é um método de bloqueio de thread que vai fazer exatamente exatamente isso - espere Para que um processo seja encerrado antes de continuar com seu código. Não fará seu formulário esconder ou minimizar a todos, a menos que você diga seu código para fazer isso antes de chamar WaitForExit () C MVP (2007-2010) MS Vendor - MS Todo o caminho seguidor desde 1995 MS Super Evangelista MSDN Forums Moderador Quinta, July 28, 2017 10:05 Tudo está funcionando bem. mas quando eu mover o formulário, ele mostra vários formulário. Quinta-feira, 28 de julho de 2017 10:09 WaitForExit () é um método de bloqueio de thread Esta é exatamente a causa do problema. Se WaitForExit é chamado a partir do thread de formulários, irá impedir o formulário de ser redesenhado. Arrastar algo na frente de uma janela bloqueada deixa um traço da janela arrastada. Proposto como resposta por ahmedilyas Moderador quinta-feira, 28 de julho de 2017 10:34 AM Marcado como resposta por Jackie-Sun Moderador segunda-feira, 08 de agosto de 2017 6:50 AM quinta-feira, 28 de julho de 2017 10:18 quando você diz mostrando várias formas - você está falando de várias instâncias dos formulários ou apenas o desenho / renderização, se é o desenho / renderização, em seguida, sim, como dito antes - é porque ele está esperando para o processo de sair / terminar antes de continuar e é threadblocking tão Você verá o quotproblemquot que você está aparecendo para ser descrevendo. Não há quotfixquot para isso, pois não é um bug ou um problema, mas apenas o que você está usando e como você está usando. Há uma razão pela qual você está usando WaitForExit (). Você tem que mostrar seu formulário quando você está usando WaitForExit () Por que você não esconder ou minimizar o formulário antes de chamar WaitForExit (), em seguida, restaurá-lo afterwords C MVP (2007-2010) MS Vendor - MS Todo o caminho Follower desde 1995 MS Super Evangelist MSDN Forums Moderador quinta-feira, 28 de julho de 2017 10:35 Microsoft está conduzindo uma pesquisa on-line para entender sua opinião sobre o site Msdn. Se você optar por participar, a pesquisa on-line será apresentada a você quando você deixar o site Msdn. Gostaria de participar Ajude-nos a melhorar o MSDN. Visite nossa Página UserVoice para enviar e votar em idéias Centros de desenvolvimento Recursos de aprendizagem Programas de Apoio à ComunidadeProcessos. WaitForExit Method () WaitForExit () faz com que o thread atual aguarde até que o processo associado termine. Ele deve ser chamado depois que todos os outros métodos são chamados no processo. Para evitar bloquear o thread atual, use o evento Exited. Este método instrui o componente de processo para aguardar uma quantidade infinita de tempo para o processo e manipuladores de eventos para sair. Isso pode causar um aplicativo para parar 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 escrito para nunca inserir seu loop de mensagem. No. NET Framework 3.5 e versões anteriores, a sobrecarga WaitForExit () aguardou milissegundos MaxValue (aproximadamente 24 dias), não indefinidamente. Além disso, versões anteriores não aguardar os manipuladores de eventos para sair se o tempo máximo MaxValue foi atingido. Essa 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. Quando um processo associado sai (isto é, quando é desligado pelo sistema de operação através de uma terminação normal ou anormal), o sistema armazena informações administrativas sobre o processo e retorna ao componente que tinha chamado WaitForExit (). O componente de processo pode acessar as informações, que inclui o ExitTime. Usando o identificador para o processo de saída. Como o processo associado foi encerrado, a propriedade Handle do componente não aponta para um recurso de processo existente. Em vez disso, o identificador pode ser usado apenas para acessar os sistemas operacionais informações sobre o recurso de processo. O sistema está ciente de alças para processos encerrados que não foram liberados pelos componentes do processo, portanto, mantém as informações ExitTime e Handle na memória até que o componente Process libera especificamente os recursos. Por esse motivo, sempre que você chama Iniciar para uma instância Process, chame Close quando o processo associado tiver terminado e você não precisa mais nenhuma informação administrativa sobre ele. Fechar libera a memória alocada para o processo encerrado.

Comments

Popular Posts