Monday 7 August 2017

Enableraisingevents Waitforexit C #


Eu tenho um executável, que funciona bem quando eu executá-lo manualmente, e ele existe como deveria com a saída esperada. Mas quando eu executá-lo com o método abaixo, o evento Process. Exited nunca será disparado. Observe que me lembrei do Process. EnableRaisingEvents O problema é o mesmo, se eu usar Process. WaitForExit () em vez de extensões reativas, aguardar o evento de saída. Além disso, se eu executar o processo com outro argumento, que produz outro resultado, ele existe bem. Parece ter algo a ver com o process. StartInfo. RedirectStandardOutput verdadeiro desde quando desativar isso, ele funciona. Mas isso poderia ser apenas um sintoma de outro problema. Qualquer ajuda é apreciada :-) Existe um impasse no seu código. A saída padrão é apenas um tipo de pipe nomeado, que possui um pequeno buffer para transferir dados de um processo para o outro. Se o buffer estiver cheio, o processo de escrita deve aguardar o processo de leitura para recuperar alguns dados do buffer. Então, o processo que você iniciou pode aguardar que você leia a saída padrão, mas está aguardando o processo para finalizar antes de começar a ler - deadlock. A solução é ler continuamente enquanto o processo está sendo executado - basta chamar StandardOutput. ReadToEnd () antes de chamar WaitForExit (). Se você quiser ler sem bloquear o tópico atual, você pode usar BeginOutputReadLine () e os eventos OutputDataReceived. Respondido em 28 de fevereiro às 15: 19 Estou trabalhando em um programa que atua como instalador de vários programas. O meu programa simples executa outros programas de instalação como processos de C. Eu estava tentando usar o evento process. Exited para acionar o próximo passo da instalação, mas esse evento nunca parece ser ativado mesmo quando os processos estão finalizados e termina. Alguém sabe por que isso é e uma solução para ele. Preciso de uma maneira de controlar as diferentes etapas de forma linear e evitar que vários processos sejam executados simultaneamente. Eu usaria o método. WaitForExit (), mas isso evita que o meu formulário do Windows atualize e coloque um objeto diferente em cima dele faz parecer que o formulário não está respondendo. Obrigado pela ajuda Segunda-feira, 20 de março de 2006 10:04 PM Tente configurar a propriedade Process. EnableRaisingEvents como verdadeira. Terça-feira, 21 de março de 2006 4:40 AM É porque os eventos estão sendo executados em outro segmento, você deve empurrar as chamadas de volta para o segmento principal usando o controle. invoke () weblogs. asp. netjustinrogersarticles126345.aspx inclui uma explicação detalhada. Terça-feira, 21 de março de 2006 7:27 PM Todas as respostas Tente configurar a propriedade Process. EnableRaisingEvents como verdadeira. Terça-feira, 21 de março de 2006 4:40 AM Obrigado pela dica Terça-feira, 21 de março de 2006 3:18 PM Essa linha de código que você me deu permite que os eventos sejam acionados, mas também causou alguns outros problemas. Após o evento ter sido Desencadeado não consigo alterar nenhuma das propriedades dos objetos do formulário. Diz que eles foram criados em outro tópico. Estou usando um P4 com hyperthreadign, mas não fiz nenhuma programação de thread. Eu tentei executar o programa com CheckForIllegalCrossThreadCalls falso que o programa poderia ser executado, mas quando eu tentei abrir um novo formulário do evento funtion (ou de uma função chamada pela função de evento) o formulário não seria carregado corretamente e pararia de responder. Alguém tem idéias O que está causando isso e o que os processos têm a ver com isso. Terça-feira, 21 de março de 2006 4:09 PM Estou tendo o mesmo tipo de problema. Eu tenho um formulário com um botão e uma barra de progresso. Estou usando Process. Start () para dois (2) processos no evento buttonClick (). O que eu quero fazer é mostrar o status através do progrssbar após cada processo ser concluído. Estou usando WaitForExit () para o processo sair. Mas o prgress bar não é atualizado após cada chamada para Process. Start (). Parece que a forma principal perde o foco quando um processo é iniciado e nunca o recupera até que todos os processos sejam concluídos. Eu tentei this. Active () no formulário após WaitForExit (), não funcionou. PrcA1.Exited new EventHandler (ProcessExitedEvent), mas também não funcionou. Qualquer indício de como atualizar a barra de progresso no formulário após cada chamada Processs. Start (). Aqui está o código de exemplo: com Progressbar1.Step 25 private void InstallClick (object sender, System. EventArgs e) FPM Processo de instalação prcA1 Process. Start (quotA1.exequot) prcA1.Exited new EventHandler (ProcessExitedEvent) prcA1.EnableRaisingEvents true prcA1.WaitForExit () This. Activate () progressBar1.PerformStep () Processo de instalação do driver prcB1 Process. Start (quotB1.exequot) prcB1.Exited new EventHandler (ProcessExitedEvent) prcB1.EnableRaisingEvents true prcDriverB1.WaitForExit () progressBar1.PerformStep () Processo de instalação do driver prcC1 Process. Start (quotC1.exequot) prcC1.Exited new EventHandler (ProcessExitedEvent) prcC1.EnableRaisingEvents true prcC1.WaitForExit () progressBar1.PerformStep () Processo de instalação do driver prcD1 Process. Start (quotD1.exequot) prcD1.Exited new EventHandler (ProcessExitedEvent) PrcD1.EnableRaisingEvents true prcD1.WaitForExit () progressBar1.PerformStep () private void ProcessExitedEvent (remetente de objeto, System. EventArgs e) this. A Ctivate () progressBar1.PerformStep () terça-feira, 21 de março de 2006 16:45

No comments:

Post a Comment