private static void ConvertTask(BindingList <FileListItem> fileListItems, FileListItem item, string configFileName, string outputFolder, SemaphoreSlim semaphore) { semaphore.Wait(); if (!fileListItems.Contains(item)) { semaphore.Release(); return; } try { string content = System.IO.File.ReadAllText(item.FileName); string result = Converter.Convert(content, configFileName); string outputPath; if (outputFolder == null) { outputPath = item.FileName; } else { outputPath = outputFolder + "\\" + System.IO.Path.GetFileName(item.FileName); } System.IO.File.WriteAllText(outputPath, result, Encoding.UTF8); progress.Report(new Reportinfo { FileListItems = fileListItems, Finishied = true, Item = item }); } catch (Exception exception) { progress.Report(new Reportinfo { FileListItems = fileListItems, Finishied = false, Item = item, Message = exception.Message }); } finally { semaphore.Release(); } }
public static async void ConvertAndStoreFilesInList(BindingList <FileListItem> fileListItems, string configFileName, string outputFolder = null) { if (isRunning) { return; } isRunning = true; while (fileListItems.Count != 0) { SemaphoreSlim semaphore = new SemaphoreSlim(MaxTask, MaxTask); var fileListItemsClone = new FileListItem[fileListItems.Count]; fileListItems.CopyTo(fileListItemsClone, 0); var tasks = new List <Task>(fileListItemsClone.Length); foreach (var item in fileListItemsClone) { tasks.Add(Task.Run(() => ConvertTask(fileListItems, item, configFileName, outputFolder, semaphore))); } await Task.WhenAll(tasks); } isRunning = false; }