示例#1
0
        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; });
        }
示例#2
0
 public MyApp()
 {
     _loger      = new LogerFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "log.txt"));
     _treeItem   = new Tree();
     _finderList = new FinderList();
 }