Elina: obrigado pela sua resposta. Há algumas notas na parte inferior deste MSDN doc (msdn. microsoften-uslibraryhellip) que alertam sobre potenciais bloqueios se você ler ao final de ambos os fluxos stdout e stderr redirecionados de forma síncrona. É difícil dizer se sua solução é suscetível a esse problema. Além disso, parece que você está enviando o process39 stdoutstderr output novamente na entrada. Por quê. ) Ndash Matthew Piatt 26 de setembro 16 às 4:42 Esta é uma solução mais moderna, Tarefa paralela (TPL), baseada em solução para 4.5 e acima. Exemplo de uso Implementação respondida 5 de outubro 16 às 10:54 Eu acho que isso é uma abordagem simples e melhor (não precisamos de AutoResetEvent): respondido 14 de junho 12 às 14:29 Verdadeiro, mas não deveria estar fazendo. FileName Path quotggsci. exequot quot lt Obeycommand. txtquot para simplificar o seu código também Ou talvez algo equivalente a quotggsci. exequot do quot do comando quotecho se você realmente não quiser usar um arquivo obeycommand. txt separado. Ndash Amit Naidu Jun 4 13 at 22:03 Sua solução não precisa de AutoResetEvent, mas você pesquisa. Quando você faz uma pesquisa em vez de usar o evento (quando está disponível), você está usando a CPU sem motivo e isso indica que você é um programador ruim. Sua solução é realmente ruim quando comparada com a outra usando AutoResetEvent. (Mas não te dou -1 porque voce tentou ajudar). Ndash Eric Ouellet Nov 7 14 às 18:38 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. Respondeu 13 de janeiro 15 às 10:35 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 bug 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 depois que o processo for 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 você Configure-o para 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 obter uma leitura assíncrona segura de um fluxo de saída de um processo da maneira atual Process 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 a condição de corrida. O aplicativo Forçar () é um método de bloqueio de threads. Esta é exatamente a causa do problema. Se WaitForExit for chamado a partir do tópico formulários, ele impedirá que o formulário seja redesenhado novamente. Arrastar algo na frente de uma janela bloqueada deixa um traço da janela arrastada. Proposta como resposta por ahmedilyas Moderador quinta-feira, 28 de julho de 2011 10:34 Marcado como resposta por Jackie-Sun Moderador segunda-feira, 8 de agosto de 2011 6:50 am quinta-feira, 28 de julho de 2011 10:18 AM O código seria melhor e ele Também seria melhor se você puder nos dizer exatamente o que você está tentando alcançar. WaitForExit () simplesmente espera (bloqueia seu código durante esse período) para que um processo saia antes de continuar com a execução do seu código de chamada. C MVP (2007-2010) MS Vendor - MS Todo o caminho Seguidor desde 1995 MS Super Evangelista MSDN Forums Moderador Proposta como resposta por ahmedilyas Moderador quinta-feira, 28 de julho de 2011 10:33 Marcado como resposta por Jackie-Sun Moderador segunda-feira, agosto 08 de 2011 6:50 AM quinta-feira, 28 de julho de 2011 9:57 AM Todas as respostas Eu acho que isso não tem relação com a função waitforexit. Que forma você está arrastando. Primeiro formulário exe ou segundo formulário exe. Um código pequeno é apreciado, marque minha postagem como resposta se minha postagem foi útil para você quinta-feira, 28 de julho de 2011 9:52 AM O código seria melhor e também seria melhor se você puder nos dizer exatamente o que você está tentando alcançar . WaitForExit () simplesmente espera (bloqueia seu código durante esse período) para que um processo saia antes de continuar com a execução do seu código de chamada. C MVP (2007-2010) MS Vendor - MS Todo o caminho Seguidor desde 1995 MS Super Evangelista MSDN Forums Moderador Proposta como resposta por ahmedilyas Moderador quinta-feira, 28 de julho de 2011 10:33 Marcado como resposta por Jackie-Sun Moderador segunda-feira, agosto 08, 2011 6:50 AM quinta-feira, 28 de julho de 2011 9:57 AM eu tinha verificado. Tem problema no waitforexit () only. i percebi esse problema quando mover o segundo formulário exe Editado por RAJ KUMAR. R quinta-feira, 28 de julho, 2011 10:09 AM quinta-feira, 28 de julho de 2011 10:02 AM o que exatamente é o problema você leu minha resposta você também leu o link que eu tinha fornecido WaitForExit () é um método de bloqueio de thread que fará exatamente exatamente isso - espere Para que um processo saia antes de continuar com seu código. NÃO fará o seu formulário se esconder ou minimizar, a menos que você diga seu código para fazer isso antes de ligar para WaitForExit () C MVP (2007-2010) MS Vendor - MS Todo o caminho Seguidor desde 1995 MS Super Evangelist MSDN Forums Moderador Quinta-feira, 28 de julho de 2011 10:05 Tudo está funcionando bem. mas quando eu mudo o formulário, ele mostra uma forma múltipla. Quinta-feira, 28 de julho de 2011 10:09 AM WaitForExit () é um método de bloqueio de thread. Esta é exatamente a causa do problema. Se WaitForExit for chamado a partir do tópico formulários, ele impedirá que o formulário seja redesenhado novamente. 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 2011 10:34 Marcado como resposta por Jackie-Sun Moderador segunda-feira, 8 de agosto de 2011 6:50 AM quinta-feira, 28 de julho de 2011 10:18 quando você diz mostrando múltiplas formas - você está falando de várias instâncias dos formulários ou apenas do desenho se é o desenho, então sim, como disse antes - é porque está aguardando o processo de saída antes que ele continue e seja threadblocking para que você veja o quotproblemquot você Estão a descrever. Não há quotfixquot para isso, pois não é um bug ou um problema, mas apenas o que você está usando e como você o está usando. Existe uma razão pela qual você está usando WaitForExit (). Você precisa mostrar seu formulário quando você está usando WaitForExit () Por que você não esconde ou minimiza o formulário antes de ligar para WaitForExit (), então restaure-o afterwords C MVP (2007-2010) MS Vendor - MS Todo o caminho Seguidor desde 1995 MS Super Evangelista Moderador dos fóruns MSDN quinta-feira, 28 de julho de 2011 10:35 A Microsoft está realizando 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ê deixar o site Msdn. Você gostaria de participar? Ajude-nos a melhorar o MSDN. Visite a nossa página UserVoice para enviar e votar ideias Centros Dev Recursos de aprendizagem
No comments:
Post a Comment