public static async Task <FileSystemDrive> UpdateFolderAsync(FileSystemDrive fileSystemDrive, FileSystemDirectory targetDirectory, IProgress <StorageManagerProgress> progress) { return(await Task.Run(() => UpdateFolder(fileSystemDrive, targetDirectory))); }
private static FileSystemDrive UpdateFolder(FileSystemDrive fileSystemDrive, FileSystemDirectory targetDirectory) { return(fileSystemDrive); }
private void ThMain() { FileSystemDrive fileSystemDrive = new FileSystemDrive(); var driveInfoArr = DriveInfo.GetDrives(); DriveInfo driveInfo = null; TaskIsRunning = true; try { foreach (DriveInfo di in driveInfoArr) { if (di.Name == _driveName) { driveInfo = di; break; } } if (driveInfo != null) { fileSystemDrive.VolumeLabel = driveInfo.VolumeLabel; fileSystemDrive.DriveLetter = driveInfo.Name; fileSystemDrive.DriveType = driveInfo.DriveType; fileSystemDrive.FreeSpace = driveInfo.AvailableFreeSpace; fileSystemDrive.TotalSpace = driveInfo.TotalSize; } else { fileSystemDrive = null; } } catch { fileSystemDrive = null; } if (fileSystemDrive != null) { DirectoryInfo rootDir = driveInfo.RootDirectory; fileSystemDrive.RootFileList = new List <FileSystemFile>(); fileSystemDrive.DirectoryList = new List <FileSystemDirectory>(); foreach (FileInfo file in rootDir.GetFiles()) { fileSystemDrive.RootFileList.Add(new FileSystemFile { CreateDate = file.CreationTime, FileSize = file.Length, FileAttributes = file.Attributes, ModifiedDate = file.LastWriteTime, Name = file.Name, FullName = fileSystemDrive.DriveLetter + file.Name }); } //Set progress data _maxProgress = GetDirectoryCount(rootDir, 0, 2); var rootDirectories = rootDir.GetDirectories(); var rootDirectoriesQueue = new Queue <DirectoryInfo>(rootDirectories); var awaitTasksList = new List <Task>(); while (rootDirectoriesQueue.Count > 0) { if (!_runThMain) { break; } for (int i = 0; i < MAX_THREADS; i++) { if (rootDirectoriesQueue.Count == 0 || awaitTasksList.Count >= MAX_THREADS) { break; } DirectoryInfo dir = rootDirectoriesQueue.Dequeue(); Task t = Task.Run(() => fileSystemDrive.DirectoryList.Add(GetFileSystemDirectory(dir, 0, 2))); awaitTasksList.Add(t); } while (awaitTasksList.Count >= MAX_THREADS) { Task awaitTask = awaitTasksList.First(); awaitTask.Wait(); awaitTasksList.Remove(awaitTask); } } Task.WaitAll(awaitTasksList.ToArray()); } progressManualResetEvent.Set(); if (_fileDataReturnCallback != null) { _fileDataReturnCallback.Invoke(fileSystemDrive); } TaskIsRunning = false; }