我是一位想要製作平均視頻的新手程序員。我已經創建了一個程序來創建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 object
和System.UnauthorizedAccessException
的,當我運行在同一時間超過3-4進程。
我懷疑它是WaitForExit()給我的問題,但沒有調試它的技能。
我也看過Threading.Task,但我的技能不夠好用。
所以溶液我後如下:
在任一組在同一時間執行與獨立動作或x文件x線是1個輸入文件與1分的動作,其中y過程的極限編譯或運行時。
編程語言對我來說並不重要,儘管我的首選是可以理解的C#。
(結果是一樣的東西https://www.youtube.com/watch?v=ph6-6bYTgs0,與n幀平均起來)
測試文件:https://mega.nz/#!CUowlBYT!IhqGdtILO7fvcgE2H1wycfXWd1W8PmSx1-lvHCKlo0c(點擊通過瀏覽器下載) –