Process. waitforexit c # example
Obter através da App Store Leia esta publicação em nosso aplicativo!
Process. WaitForExit (Int32)
No momento, estou trabalhando em um aplicativo Console Runner que possui o seguinte código para gerar o log e aguardar até que o processo seja concluído:
Eu tenho duas perguntas sobre esse pedaço de código.
Percebi que se o processo demorar mais de 30 segundos, a chamada p. ExitCode bombardeia. O que acontece se o meu processo demorar apenas 1 segundo, ele irá esperar 30 segundos de qualquer maneira ou o processo será avisado pelo CLR?
Se você tentar obter o ExitCode antes do processo ter saído, a tentativa lança uma exceção. Examine a propriedade HasExited primeiro para verificar se o processo associado foi finalizado.
Não há garantia de que, quando sua chamada para WaitForExit retornar, o processo será encerrado. Da documentação de WaitForExit:
A sobrecarga WaitForExit (Int32) é usada para fazer o segmento atual aguardar até que o processo associado seja finalizado. Essa sobrecarga instrui o componente Processo a aguardar uma quantidade limitada de tempo para que o processo saia. Se o processo associado não sair pelo final do intervalo porque a solicitação de término é negada, o falso é retornado ao procedimento de chamada. Você pode especificar um número negativo (Infinito) por milissegundos e Process. WaitForExit (Int32) se comportará da mesma maneira que a sobrecarga WaitForExit (). Se você passar 0 (zero) para o método, ele retorna verdadeiro somente se o processo já foi encerrado; Caso contrário, ele retorna imediatamente falso.
Observe que isso responde sua segunda pergunta. Se o processo for encerrado antes do tempo decorrido, o WaitForExit retornará.
Como você especificou um tempo limite finito, você permite a possibilidade de a função retornar antes do processo ter terminado. Então, você poderia escrever seu código como este:
Process. waitforexit c # example
Obter através da App Store Leia esta publicação em nosso aplicativo!
WaitforExit doesn & # 39; t funcionar corretamente.
Então eu tenho lutado contra esse problema por algum tempo e tentei muitas maneiras diferentes de consertá-lo, mas não consegui.
Basicamente, o meu aplicativo faz é chamar um arquivo java para carregar um aplicativo em um dispositivo. Enquanto ele está carregando é imprimi-lo 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 2º 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. 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. Bascally eu preciso do processo para sair, então eu posso continuar pensando o forloop para carregar o próximo arquivo.
Se você WaitForExit, seu aplicativo bloqueia (espera) até o processo sair. Isso significa que não é possível processar nenhuma mensagem do Windows em seu thread da interface do usuário, portanto, ela não atualiza a interface do usuário.
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 retornaria ao loop principal do aplicativo para que ele fosse executado normalmente enquanto aguardava a conclusão do processo externo.
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 esperando que um processo seja concluído). 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)
Process. waitforexit c # example
Obter através da App Store Leia esta publicação em nosso aplicativo!
Processo WaitForExit não está aguardando.
Criei o aplicativo spooler de impressão para imprimir pdf de forma assíncrona.
(O aplicativo usa o comando muitoPDF para imprimir da impressora de rede)
Mas não esperava o código WaitForExit. Ele executou (aqui // Algumas coisas), mesmo que meu documento esteja na fila da impressora.
Existe alguma outra maneira de notificar quando a impressão é feita?
Seu código aguarda que o cmd. exe termine, o que (provavelmente) termina imediatamente após ter iniciado pdfprint. exe como um processo filho. Eu te sugiro.
ou seja, comece pdfprint. exe diretamente (por que você precisa da linha de comando do Windows aqui?) ou encontre o objeto Processo do processo filho - por exemplo, através do WMI, como descrito aqui - e aguarde que esse processo saia em vez disso.
No entanto, ambas as abordagens só funcionam se pdfprint. exe realmente espera que o trabalho de impressão agendado seja concluído. Eu não conheço a ferramenta, então não tenho ideia se ela se comporta desse jeito. Se não for, você teria que acessar a fila de impressão, o que (como indicado por Hans em seu comentário) não é recomendado.
Aqui está uma abordagem If-Everything-Else-Fails que você pode ter que tomar (se pdfprint. exe não esperar até a conclusão do encerramento). É feio, mas vai funcionar:
Digite um loop while até que o arquivo de destino exista (idealmente com um tempo limite, no caso de pdfprint. exe se deparar com um problema e nunca gera o arquivo) Digite um segundo loop while, onde cada X milissegundos (digamos, 500? 1000?), Ele verifica o comprimento do arquivo do PDF de saída. Se o tamanho do arquivo for o mesmo entre as verificações, você assume que o processo de saída está finalizado e começa a trabalhar com o arquivo.
Como eu disse, não é bonito (e você não deve usá-lo, a menos que você não tenha nenhum recurso). mas faz o trabalho. Eu tive que usar este tipo de abordagem para lidar com arquivos recebidos sendo copiados pela rede (você precisa processar arquivos quando eles entram, mas você precisa saber que o arquivo está finalizado sendo copiado antes de tocá-lo, porque os arquivos PDF serão bloqueados assim que eles são abertos e, em seguida, a cópia do arquivo falhará.)
Process. waitforexit c # example
Dentro de um aplicativo que estou escrevendo, preciso fazer o seguinte:
Execute um aplicativo GUI externo (para os propósitos deste exemplo, vamos assumir o seu MS Word). Bloqueie o segmento atual até que o aplicativo GUI externo tenha sido fechado.
Minha primeira tentativa de fazer isso foi fazer uso do objeto System. Diagnostics. Process.
// Inicialize o objeto de processo.
myProcess. StartInfo. FileName = & quot; C: \\ Arquivos de Programas \\ Microsoft Office \\ OFFICE11 \\ Winword. exe & quot ;;
myProcess. StartInfo. WorkingDirectory = & quot; C: \\ Arquivos de Programas \\ Microsoft Office \\ OFFICE11 & quot ;;
// Inicie o processo e aguarde que ele seja fechado.
System. Windows. Forms. MessageBox. Show (& quot; Aplicativo de usuário fechado & quot;);
Quando eu executo o código acima, o MS Word é iniciado como esperado. No entanto, a chamada WaitForExit () não parece estar fazendo seu trabalho como eu obter o instantâneo de caixa de mensagem instantaneamente após o processo do MS Word é iniciado e não depois que ele for fechado.
Por que a chamada WaitForExit () não aguarda o término do processo do MSWord? O fato de eu estar lançando um aplicativo GUI em vez de um aplicativo de linha de comando é significativo?
Qualquer ajuda seria muito apreciada.
Todas as respostas.
Depois de alguns testes, concluí que é porque não há um documento de usuário carregado. Se você fizer o parâmetro do nome do arquivo um documento real funciona como esperado:
// Inicie o processo e aguarde que ele seja fechado.
System. Windows. Forms. MessageBox. Show (& quot; Aplicativo de usuário fechado & quot;);
Seja ou não um documento carregado, não deve ser importante? O objeto Processo apenas fornece uma maneira genérica de executar e monitorar processos, não sabe nada sobre os internos do que o Word carregou com segurança?
Em qualquer caso, tentei o código conforme recomendado e recebi uma exceção "Nenhum processo associado a este objeto", presumivelmente porque foi passado o nome do arquivo de um documento em vez de um executável.
(Eu também devo mencionar que estou usando apenas o Word como um exemplo aqui para resolver esse problema em particular, e por isso não quero ficar muito preso ao que está acontecendo na própria Word. Eu tentei e falhei em usar o WaitForExit. () com uma variedade de aplicativos GUI.)
OK, acabei de chegar em casa e tentei isso no meu PC doméstico, e você não saberia que o código funciona! Não tenho certeza por que causa problemas no laptop do meu trabalho.
Em qualquer caso, obrigado por você ajudar a DMan.
Proposta como resposta por Brad Mathews sexta-feira, 19 de dezembro de 2008 12:55.
objProcess As New System. Diagnostics. ProcessStartInfo (& quot; Winword. exe & quot; / t c: \ mydoc. doc & quot;)
A Microsoft está conduzindo 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ê sair do site do Msdn.
Process. waitforexit c # example
Obter através da App Store Leia esta publicação em nosso aplicativo!
process. WaitForExit () de forma assíncrona.
Quero aguardar um processo para terminar, mas process. WaitForExit () trava minha GUI. Existe uma maneira baseada em eventos, ou eu preciso gerar um segmento para bloquear até sair, depois delegar o evento eu mesmo?
A partir de 4.0 / C # 5, é melhor representar isso usando o padrão assíncrono.
Se você escolher a resposta do MgSam, esteja ciente, se você passar por WaitForExitAsync algum CancelamentoToken, que será automaticamente cancelado após o atraso especificado, você pode obter uma InvalidOperationException. Para corrigir isso, você precisa mudar.
P. S .: não esqueça de dispor o seu CancelamentoTokenSource no tempo.
De acordo com este link, o método WaitForExit () é usado para fazer o thread atual aguardar até o processo associado terminar. No entanto, o processo possui um evento Exitado ao qual você pode se conectar.
Process. waitforexit c # example
A sobrecarga WaitForExit () () () é usada para fazer o thread atual aguardar até o processo associado terminar. Esse 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 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 de nota termine? Quais são os sinais disso? Qual é a prova?
Processo p = novo Processo ();
MessageBox. Show (& quot; agora o navegador deve estar fechado & quot;);
Exceto que você não obtém um objeto de processo que você pode usar. Se você tentar.
Dim myProc como novo processo ()
myProc = Process. Start (& quot; iexplore & quot ;, & quot; finance. yahoo/q/hp? s = & quot; + symbol);
A Microsoft está conduzindo 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ê sair do site do Msdn.
Obter através da App Store Leia esta publicação em nosso aplicativo!
WaitforExit doesn & # 39; t funcionar corretamente.
Então eu tenho lutado contra esse problema por algum tempo e tentei muitas maneiras diferentes de consertá-lo, mas não consegui.
Basicamente, o meu aplicativo faz é chamar um arquivo java para carregar um aplicativo em um dispositivo. Enquanto ele está carregando é imprimi-lo 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 2º 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. 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. Bascally eu preciso do processo para sair, então eu posso continuar pensando o forloop para carregar o próximo arquivo.
Se você WaitForExit, seu aplicativo bloqueia (espera) até o processo sair. Isso significa que não é possível processar nenhuma mensagem do Windows em seu thread da interface do usuário, portanto, ela não atualiza a interface do usuário.
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 retornaria ao loop principal do aplicativo para que ele fosse executado normalmente enquanto aguardava a conclusão do processo externo.
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 esperando que um processo seja concluído). 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)
Process. waitforexit c # example
Obter através da App Store Leia esta publicação em nosso aplicativo!
Processo WaitForExit não está aguardando.
Criei o aplicativo spooler de impressão para imprimir pdf de forma assíncrona.
(O aplicativo usa o comando muitoPDF para imprimir da impressora de rede)
Mas não esperava o código WaitForExit. Ele executou (aqui // Algumas coisas), mesmo que meu documento esteja na fila da impressora.
Existe alguma outra maneira de notificar quando a impressão é feita?
Seu código aguarda que o cmd. exe termine, o que (provavelmente) termina imediatamente após ter iniciado pdfprint. exe como um processo filho. Eu te sugiro.
ou seja, comece pdfprint. exe diretamente (por que você precisa da linha de comando do Windows aqui?) ou encontre o objeto Processo do processo filho - por exemplo, através do WMI, como descrito aqui - e aguarde que esse processo saia em vez disso.
No entanto, ambas as abordagens só funcionam se pdfprint. exe realmente espera que o trabalho de impressão agendado seja concluído. Eu não conheço a ferramenta, então não tenho ideia se ela se comporta desse jeito. Se não for, você teria que acessar a fila de impressão, o que (como indicado por Hans em seu comentário) não é recomendado.
Aqui está uma abordagem If-Everything-Else-Fails que você pode ter que tomar (se pdfprint. exe não esperar até a conclusão do encerramento). É feio, mas vai funcionar:
Digite um loop while até que o arquivo de destino exista (idealmente com um tempo limite, no caso de pdfprint. exe se deparar com um problema e nunca gera o arquivo) Digite um segundo loop while, onde cada X milissegundos (digamos, 500? 1000?), Ele verifica o comprimento do arquivo do PDF de saída. Se o tamanho do arquivo for o mesmo entre as verificações, você assume que o processo de saída está finalizado e começa a trabalhar com o arquivo.
Como eu disse, não é bonito (e você não deve usá-lo, a menos que você não tenha nenhum recurso). mas faz o trabalho. Eu tive que usar este tipo de abordagem para lidar com arquivos recebidos sendo copiados pela rede (você precisa processar arquivos quando eles entram, mas você precisa saber que o arquivo está finalizado sendo copiado antes de tocá-lo, porque os arquivos PDF serão bloqueados assim que eles são abertos e, em seguida, a cópia do arquivo falhará.)
Process. waitforexit c # example
Dentro de um aplicativo que estou escrevendo, preciso fazer o seguinte:
Execute um aplicativo GUI externo (para os propósitos deste exemplo, vamos assumir o seu MS Word). Bloqueie o segmento atual até que o aplicativo GUI externo tenha sido fechado.
Minha primeira tentativa de fazer isso foi fazer uso do objeto System. Diagnostics. Process.
// Inicialize o objeto de processo.
myProcess. StartInfo. FileName = & quot; C: \\ Arquivos de Programas \\ Microsoft Office \\ OFFICE11 \\ Winword. exe & quot ;;
myProcess. StartInfo. WorkingDirectory = & quot; C: \\ Arquivos de Programas \\ Microsoft Office \\ OFFICE11 & quot ;;
// Inicie o processo e aguarde que ele seja fechado.
System. Windows. Forms. MessageBox. Show (& quot; Aplicativo de usuário fechado & quot;);
Quando eu executo o código acima, o MS Word é iniciado como esperado. No entanto, a chamada WaitForExit () não parece estar fazendo seu trabalho como eu obter o instantâneo de caixa de mensagem instantaneamente após o processo do MS Word é iniciado e não depois que ele for fechado.
Por que a chamada WaitForExit () não aguarda o término do processo do MSWord? O fato de eu estar lançando um aplicativo GUI em vez de um aplicativo de linha de comando é significativo?
Qualquer ajuda seria muito apreciada.
Todas as respostas.
Depois de alguns testes, concluí que é porque não há um documento de usuário carregado. Se você fizer o parâmetro do nome do arquivo um documento real funciona como esperado:
// Inicie o processo e aguarde que ele seja fechado.
System. Windows. Forms. MessageBox. Show (& quot; Aplicativo de usuário fechado & quot;);
Seja ou não um documento carregado, não deve ser importante? O objeto Processo apenas fornece uma maneira genérica de executar e monitorar processos, não sabe nada sobre os internos do que o Word carregou com segurança?
Em qualquer caso, tentei o código conforme recomendado e recebi uma exceção "Nenhum processo associado a este objeto", presumivelmente porque foi passado o nome do arquivo de um documento em vez de um executável.
(Eu também devo mencionar que estou usando apenas o Word como um exemplo aqui para resolver esse problema em particular, e por isso não quero ficar muito preso ao que está acontecendo na própria Word. Eu tentei e falhei em usar o WaitForExit. () com uma variedade de aplicativos GUI.)
OK, acabei de chegar em casa e tentei isso no meu PC doméstico, e você não saberia que o código funciona! Não tenho certeza por que causa problemas no laptop do meu trabalho.
Em qualquer caso, obrigado por você ajudar a DMan.
Proposta como resposta por Brad Mathews sexta-feira, 19 de dezembro de 2008 12:55.
objProcess As New System. Diagnostics. ProcessStartInfo (& quot; Winword. exe & quot; / t c: \ mydoc. doc & quot;)
A Microsoft está conduzindo 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ê sair do site do Msdn.
Process. waitforexit c # example
Obter através da App Store Leia esta publicação em nosso aplicativo!
process. WaitForExit () de forma assíncrona.
Quero aguardar um processo para terminar, mas process. WaitForExit () trava minha GUI. Existe uma maneira baseada em eventos, ou eu preciso gerar um segmento para bloquear até sair, depois delegar o evento eu mesmo?
A partir de 4.0 / C # 5, é melhor representar isso usando o padrão assíncrono.
Se você escolher a resposta do MgSam, esteja ciente, se você passar por WaitForExitAsync algum CancelamentoToken, que será automaticamente cancelado após o atraso especificado, você pode obter uma InvalidOperationException. Para corrigir isso, você precisa mudar.
P. S .: não esqueça de dispor o seu CancelamentoTokenSource no tempo.
De acordo com este link, o método WaitForExit () é usado para fazer o thread atual aguardar até o processo associado terminar. No entanto, o processo possui um evento Exitado ao qual você pode se conectar.
Process. waitforexit c # example
A sobrecarga WaitForExit () () () é usada para fazer o thread atual aguardar até o processo associado terminar. Esse 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 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 de nota termine? Quais são os sinais disso? Qual é a prova?
Processo p = novo Processo ();
MessageBox. Show (& quot; agora o navegador deve estar fechado & quot;);
Exceto que você não obtém um objeto de processo que você pode usar. Se você tentar.
Dim myProc como novo processo ()
myProc = Process. Start (& quot; iexplore & quot ;, & quot; finance. yahoo/q/hp? s = & quot; + symbol);
A Microsoft está conduzindo 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ê sair do site do Msdn.
Dentro de um aplicativo que estou escrevendo, preciso fazer o seguinte:
Execute um aplicativo GUI externo (para os propósitos deste exemplo, vamos assumir o seu MS Word). Bloqueie o segmento atual até que o aplicativo GUI externo tenha sido fechado.
Minha primeira tentativa de fazer isso foi fazer uso do objeto System. Diagnostics. Process.
// Inicialize o objeto de processo.
myProcess. StartInfo. FileName = & quot; C: \\ Arquivos de Programas \\ Microsoft Office \\ OFFICE11 \\ Winword. exe & quot ;;
myProcess. StartInfo. WorkingDirectory = & quot; C: \\ Arquivos de Programas \\ Microsoft Office \\ OFFICE11 & quot ;;
// Inicie o processo e aguarde que ele seja fechado.
System. Windows. Forms. MessageBox. Show (& quot; Aplicativo de usuário fechado & quot;);
Quando eu executo o código acima, o MS Word é iniciado como esperado. No entanto, a chamada WaitForExit () não parece estar fazendo seu trabalho como eu obter o instantâneo de caixa de mensagem instantaneamente após o processo do MS Word é iniciado e não depois que ele for fechado.
Por que a chamada WaitForExit () não aguarda o término do processo do MSWord? O fato de eu estar lançando um aplicativo GUI em vez de um aplicativo de linha de comando é significativo?
Qualquer ajuda seria muito apreciada.
Todas as respostas.
Depois de alguns testes, concluí que é porque não há um documento de usuário carregado. Se você fizer o parâmetro do nome do arquivo um documento real funciona como esperado:
// Inicie o processo e aguarde que ele seja fechado.
System. Windows. Forms. MessageBox. Show (& quot; Aplicativo de usuário fechado & quot;);
Seja ou não um documento carregado, não deve ser importante? O objeto Processo apenas fornece uma maneira genérica de executar e monitorar processos, não sabe nada sobre os internos do que o Word carregou com segurança?
Em qualquer caso, tentei o código conforme recomendado e recebi uma exceção "Nenhum processo associado a este objeto", presumivelmente porque foi passado o nome do arquivo de um documento em vez de um executável.
(Eu também devo mencionar que estou usando apenas o Word como um exemplo aqui para resolver esse problema em particular, e por isso não quero ficar muito preso ao que está acontecendo na própria Word. Eu tentei e falhei em usar o WaitForExit. () com uma variedade de aplicativos GUI.)
OK, acabei de chegar em casa e tentei isso no meu PC doméstico, e você não saberia que o código funciona! Não tenho certeza por que causa problemas no laptop do meu trabalho.
Em qualquer caso, obrigado por você ajudar a DMan.
Proposta como resposta por Brad Mathews sexta-feira, 19 de dezembro de 2008 12:55.
objProcess As New System. Diagnostics. ProcessStartInfo (& quot; Winword. exe & quot; / t c: \ mydoc. doc & quot;)
A Microsoft está conduzindo 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ê sair do site do Msdn.
Process. waitforexit c # example
Obter através da App Store Leia esta publicação em nosso aplicativo!
process. WaitForExit () de forma assíncrona.
Quero aguardar um processo para terminar, mas process. WaitForExit () trava minha GUI. Existe uma maneira baseada em eventos, ou eu preciso gerar um segmento para bloquear até sair, depois delegar o evento eu mesmo?
A partir de 4.0 / C # 5, é melhor representar isso usando o padrão assíncrono.
Se você escolher a resposta do MgSam, esteja ciente, se você passar por WaitForExitAsync algum CancelamentoToken, que será automaticamente cancelado após o atraso especificado, você pode obter uma InvalidOperationException. Para corrigir isso, você precisa mudar.
P. S .: não esqueça de dispor o seu CancelamentoTokenSource no tempo.
De acordo com este link, o método WaitForExit () é usado para fazer o thread atual aguardar até o processo associado terminar. No entanto, o processo possui um evento Exitado ao qual você pode se conectar.
Process. waitforexit c # example
A sobrecarga WaitForExit () () () é usada para fazer o thread atual aguardar até o processo associado terminar. Esse 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 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 de nota termine? Quais são os sinais disso? Qual é a prova?
Processo p = novo Processo ();
MessageBox. Show (& quot; agora o navegador deve estar fechado & quot;);
Exceto que você não obtém um objeto de processo que você pode usar. Se você tentar.
Dim myProc como novo processo ()
myProc = Process. Start (& quot; iexplore & quot ;, & quot; finance. yahoo/q/hp? s = & quot; + symbol);
A Microsoft está conduzindo 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ê sair do site do Msdn.
A sobrecarga WaitForExit () () () é usada para fazer o thread atual aguardar até o processo associado terminar. Esse 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 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 de nota termine? Quais são os sinais disso? Qual é a prova?
Processo p = novo Processo ();
MessageBox. Show (& quot; agora o navegador deve estar fechado & quot;);
Exceto que você não obtém um objeto de processo que você pode usar. Se você tentar.
Dim myProc como novo processo ()
myProc = Process. Start (& quot; iexplore & quot ;, & quot; finance. yahoo/q/hp? s = & quot; + symbol);
A Microsoft está conduzindo 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ê sair do site do Msdn.
No comments:
Post a Comment