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.
Aprenda Forex Trading com uma conta Dummy Quando se trata de negociação forex, você perceberá que ajuda inestimável que uma conta ficativa pode lhe dar. Em qualquer forma de investimento, não é sensato começar um empreendimento sem obter informações suficientes sobre como se lidar com o negócio. Este princípio também é aplicável ao comércio forex. Ao aprender os prós e contras da negociação no forex, você pode aumentar sua confiança, sabendo que você está no caminho certo no que diz respeito a ganhar dinheiro. A maioria das pessoas sabe que o câmbio é uma atividade que envolve a troca de pares de moeda em uma única vez. Há tantas coisas que você precisa aprender se você pretende trocar no forex. Ao aprender Forex. É vital que você aprenda sobre os diferentes fatores que podem ter impacto nas moedas. Desta forma, você poderá encontrar a ação apropriada. Além disso, você também deve aprender a gerenciar seus riscos, bem como os perigos da negociação forex. Você não deve esperar muito das...
Comments
Post a Comment