///<summary> Формирование элементов альбома по путям. </summary> public void LoadDir() { AlbAbsDir.Refresh(); if (!AlbAbsDir.Exists) { return; } List <FileInfo> vidList = null; try { if (WithSubDir) { vidList = AlbAbsDir.EnumerateFiles("*.*", SearchOption.AllDirectories).Where(f => CatalogEngine.vidExt.ContainsIC(f.Extension)).ToList(); } else { vidList = AlbAbsDir.EnumerateFiles("*.*", SearchOption.TopDirectoryOnly).Where(f => CatalogEngine.vidExt.ContainsIC(f.Extension)).ToList(); } } catch (UnauthorizedAccessException) { Console.WriteLine("No access to folder " + AlbAbsDir.FullName); return; } // удаляем файлы с пустым расширением, почему то они проходят проверку на расширения vidList.RemoveAll(vid => string.IsNullOrWhiteSpace(vid.Extension)); Parallel.ForEach(vidList, new ParallelOptions { MaxDegreeOfParallelism = CatalogEngine.maxThreads }, file => { // не формируем, если такое было lock (locker) if (EntryList.Any(ent2 => ent2.EntAbsFile.FullName == file.FullName)) { return; } CatalogEntry newEnt = new CatalogEntry(file, this); lock (locker) EntryList.Add(newEnt); } ); // сортируем, т.к. потоки закончились в разнобой EntryList = EntryList.OrderBy(x => x.Name, new AlphanumComparatorFast()).ToList(); }