Skip to main content

Mono Process Waitforexit Trava


Então eu tenho um programa Im perto de ser completo com. Basicamente, o que eu planejo fazer com ele está usando o agendador de tarefas do Windows para chamá-lo em determinados horários no horário da manhã para converter automaticamente, usando a ferramenta CLI da HandBrake, alguns arquivos que meu colega de trabalho descarrega na pasta de origem. Estou tentando obter o meu programa para converter apenas um programa de cada vez no loop foreach, mas se eu usar process. WaitForExit (), o programa trava indefinidamente após o primeiro arquivo estar localizado e convertido. Sempre que eu depurar o meu programa, estou recebendo 2 cmd de pop ups por qualquer motivo. Um é o prompt cmd real que está executando o comando encontrado no comando string e o outro é um caminho para minha pasta debugbin em Meus documentos. Depois que o primeiro arquivo é convertido, a janela de comando real que executa o comando e a conversão Fecham, mas então eu tenho uma janela popup por trás, mantendo-se aberto dizendo que se eu remover processo. WaitForExit (), meu programa começará a converter todos os arquivos Na pasta de origem, que está bem, mas é menos do que ideal. Aqui está o meu código. Quero que o programa apenas converta um arquivo de cada vez e saia automaticamente da instância atual de seu processo antes de mudar para a próxima partida. Obrigado por todas as sugestões e sugestões. Perguntou 8 de agosto 13 em 15: 04O código parece quase isso: como você pode ver, o código inicia um processo cmd. exe e passa para ele o comando que eu quero ser executado. Eu redireciono StandardError e StandarOutput para lê-los a partir do código. O código lê-los antes do processo. WaitForExit (Timeout) chamada conforme recomendado pela Microsoft (mais sobre isso mais tarde). O problema surge se o comando que eu envio para cmd. exe nunca termina ou trava indefinidamente. No código eu usei o comando ping - t 8.8.8.8 que, por causa da opção - t, pings o host sem parar. O que acontece O processo cmd. exe juntamente com o comando ping - t nunca sai e nunca fecha o fluxo de stdout e, portanto, o nosso código trava na linha Output. StandardOutput. ReadToEnd () do processo de saída porque não conseguiu ler todo o fluxo. O mesmo acontece também se um comando em um arquivo em lotes trava por qualquer motivo e, portanto, o código acima pode funcionar continuamente durante anos e, em seguida, é suspenso repentinamente sem nenhum motivo aparente. Antes de escrever, recomendava ler fluxos redirecionados antes do processo. WaitForExit (Timeout), bem, isso é especialmente verdadeiro se você usar a assinatura WaitForExit sem o tempo limite. Se você chamar processo. WaitForExit () antes de ler os fluxos redirecionados: código 2: você pode enfrentar um impasse se o comando que você anexar ao cmd. exe ou o processo que você está chamando preencher a saída padrão ou erro padrão. Isso porque nosso código não pode atingir as linhas de processo de saída. StandardOutput. ReadToEnd () De fato, o processo filho (o comando ping ou um arquivo em lote ou o processo que estiver executando) não pode continuar se o nosso programa não lê os buffers preenchidos dos fluxos e isso não pode acontecer porque o código está pendurado em A linha com o processo. WaitForExit () que aguardará para sempre que o projeto filho saia. O tamanho padrão de ambos os fluxos é de 4096 bytes. Você pode testar esses dois tamanhos com esses arquivos em lote: o primeiro script escreve 4096 bytes para a saída padrão e o segundo para erro padrão. Salve um destes em C: testbuffsize. bat e execute o processo de chamada do nosso programa. WaitForExit () antes do processo de saída. StandardOutput. ReadToEnd () como no código 2. Você pode fazê-lo escrevendo CommandResult Resultado ExecuteShellCommandSync (c: testbuffsize. bat, 1000) na linha 13 do código 1. O código não irá pendurar, mas se você escrever um byte mais em qualquer um dos dois fluxos, ele irá transbordar o tamanho do buffer tornando o programa aguentar. Se você precisa redirecionar e ler a saída padrão ou o erro padrão, a melhor solução é lê-los de forma assíncrona. Uma excelente maneira de fazer isso é proposta por Mark Byers neste segmento stackoverflow. Como a última coisa, observe que, se o processo filho sair apenas porque você usa o processo. WaitForExit (Timeout) assinatura e ele realmente vai no tempo limite, você deve matar o processo cmd. exe e seus possíveis filhos.

Comments

Popular posts from this blog

Fxcm Forex Education On Line

Video Biblioteca Aviso de Investimento de Alto Risco: negociação de divisas e contratos para diferenças de margem traz um alto nível de risco e pode não ser adequado para todos os investidores. Existe a possibilidade de que você possa sustentar uma perda em excesso de seus fundos depositados e, portanto, você não deve especular com o capital que não pode perder. Antes de decidir trocar os produtos oferecidos pela FXCM, você deve considerar cuidadosamente seus objetivos, situação financeira, necessidades e nível de experiência. Você deve estar ciente de todos os riscos associados à negociação na margem. A FXCM fornece conselhos gerais que não levam em consideração seus objetivos, situação financeira ou necessidades. O conteúdo deste site não deve ser interpretado como um conselho pessoal. A FXCM recomenda que você procure o conselho de um consultor financeiro separado. Clique aqui para ler o aviso de risco total. A FXCM é uma negociante de câmbio mercantil e varejista registrada da Futu...

Fxopen Review Forex Força Militar Força Relativa

Forex Relative Currency Strength Calculator Primeiro problema. O dólar americano apreciou ou depreciou a semana passada. Muito provavelmente, não poderíamos responder a essa pergunta, porque poderia ter sido apreciado contra o dólar australiano e o iene japonês, mas poderia ter se depreciado contra o dólar canadense e a libra britânica. Segundo problema. Se já conhecemos o passado por ter dados para a semana passada, e ainda não podemos dizer qual divisa forex foi a mais forte e qual moeda forex foi a mais fraca, então, como no mundo podemos tentar prever o futuro que ainda não tem dados? Solução. Nossa calculadora gratuita de negociação forex não consegue prever o futuro, mas pelo menos pode nos ajudar a conhecer o passado. O que esse software livre faz é comparar o crescimento de 1 moeda forex principal contra o crescimento de cada uma das outras 7 principais moedas. Em seguida, o software obtém 7 valores separados, e o compensa. Se o nosso software forex determinar que a moeda forex...