public void ScanFolderAndFill() { if (_pathToSrc.Length == 0) { return; } // Флаги используются в тасках _flagFileSearchEnd = false; _flagParsingEnd = false; // Очереди обработки, используются в тасках _fileQueue = new FileQueue(); _fileTypeQueue = new FileTypesQueue(); _finderList = new FinderList(); // // Ищем все файлы в отдельном потоке // var taskFileSearch = Task.Factory.StartNew(FindFiles); // // Запускаем задачу заполнения списка для поиска // Task.Factory.StartNew(FillFinderList); // // Парсим файлы в несколько потоков // // Определяем сколько ядер в система и создадим столько же потоков по парсингу. var numberCores = Environment.ProcessorCount; var tasks = new Task[numberCores]; for (int i = 0; i < numberCores; i++) { tasks[i] = Task.Factory.StartNew(ParseFiles); } // После выполнения всез задач будет сбрасываться флаг Task.Factory.ContinueWhenAll(tasks, (taskResult) => { _flagParsingEnd = true; }); }
public MyApp() { _loger = new LogerFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "log.txt")); _treeItem = new Tree(); _finderList = new FinderList(); }