2017-07-05 42 views
3

我是一位想要製作平均視頻的新手程序員。我已經創建了一個程序來創建n個.bat文件,並對n個圖像進行平均處理,現在我想盡可能快地執行它們。執行當前文件夾中的所有.bat文件並在執行後刪除它們

.bat文件是獨立的。 我在Windows環境中。我看過C#多線程(threadpool,parrallel.for,parralel.foreach等),但沒有任何功能似乎工作。我沒有幻想,這是我誰做錯了。

Powershell具有一個我想要的功能,但只能用於其他powershell命令。

我的代碼,現在大部分的工作原理是: (在https://github.com/Madsfoto/ParallelExecutionForEach完整的解決方案)

var paths = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.bat"); // have a list of all .bat files in the current directory 
System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
      proc.StartInfo.CreateNoWindow = true; 
      proc.StartInfo.UseShellExecute = false; // above is to not see the cmd window 

      proc.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory(); // It's easier than having to specify where this program will be run. 



Parallel.ForEach(paths, new ParallelOptions { MaxDegreeOfParallelism = 4 }, currentFile => // 4 is set because I have 4 cores to use 
       { 
        proc.StartInfo.FileName = currentFile; // Set the currentfile as the one being executed. currentFile is the name of the .bat file to execute 
    proc.Start(); // execute the .bat file 
         proc.WaitForExit(); 
        File.Delete(currentFile); 
       }); 

我得到System.InvalidOperationException: No process is associated with this objectSystem.UnauthorizedAccessException的,當我運行在同一時間超過3-4進程。

我懷疑它是WaitForExit()給我的問題,但沒有調試它的技能。

我也看過Threading.Task,但我的技能不夠好用。

所以溶液我後如下:

在任一組在同一時間執行與獨立動作或x文件x線是1個輸入文件與1分的動作,其中y過程的極限編譯或運行時。
編程語言對我來說並不重要,儘管我的首選是可以理解的C#。

(結果是一樣的東西https://www.youtube.com/watch?v=ph6-6bYTgs0,與n幀平均起來)

+0

測試文件:https://mega.nz/#!CUowlBYT!IhqGdtILO7fvcgE2H1wycfXWd1W8PmSx1-lvHCKlo0c(點擊通過瀏覽器下載) –

回答

0

的解決方案是在

proc.Start(); // execute the .bat file 
proc.WaitForExit(); 
try 
{ 
    File.Delete(FileName); 
} 
catch 
{ 
} 

代碼轉移到它自己的功能(與簿記東西(定義PROC等) )。 ()是罪魁禍首,事實證明,Parallel.ForEach中可能存在一個錯誤,但我一直無法可靠地重現它(實驗給出的錯誤約爲0.01%),但這種方式可行。它確實需要人們重新運行可執行文件,但這是我可以證明推送給用戶的一個負擔。

github鏈接已更新爲工作版本。

相關問題