public static async Task EncodeImages(FileInfo[] files, IF format, int qMin, int qMax, bool deleteSource) { Program.PreProcessing(); int maxThreads = await Config.GetInt("procThreads"); List <Task> runningTasks = new List <Task>(); int done = 0; foreach (FileInfo file in files) { while (runningTasks.Count >= maxThreads) { await Task.Delay(100); runningTasks = MtUtils.RemoveCompletedTasks(runningTasks, ref done); } Task newTask = Task.Run(() => EncodeImage(file, format, qMin, qMax, deleteSource)); runningTasks.Add(newTask); Program.ShowProgress("", done, files.Length); } while (runningTasks.Count > 0) { Program.ShowProgress("", done, files.Length); runningTasks = MtUtils.RemoveCompletedTasks(runningTasks, ref done); await Task.Delay(500); } Program.PostProcessing(files.Length, true); }
public static async Task ScaleDir(float sMin, float sMax, int filterMode, string filterName) { int counter = 0; FileInfo[] files = IOUtils.GetFiles(); Program.PreProcessing(); Task forEach = Task.Run(async() => Parallel.ForEach(files, await MtUtils.GetParallelOpts(), async file => { await Scale(file.FullName, sMin, sMax, filterMode, filterName); Program.ShowProgressIncrement("", ref counter, files.Length); })); while (!forEach.IsCompleted) { await Task.Delay(1); } Program.PostProcessing(files.Length, true); }