private async Task SearchConfigAsync() { try { _isSearching = true; var disks = await Task.Run(() => DiskSearcher.Search()); foreach (var disk in disks.Where(x => x.CanBeSD).OrderBy(x => x.PhysicalDrive)) { var configNew = new ConfigViewModel(); if (!await configNew.ReadAsync(disk)) { continue; } CurrentConfig = configNew; OperationStatus = Resources.OperationStatus_Found; return; } CurrentConfig = null; OperationStatus = Resources.OperationStatus_No; } finally { _isSearching = false; DelegateCommand.RaiseCanExecuteChanged(); } }
private async Task SearchConfigAsync() { isSearching = true; try { var drives = await Task.Run(() => DiskSearcher.Search()); foreach (var drive in drives.Where(x => x.CanBeSD).OrderBy(x => x.PhysicalDrive)) { var configNew = new ConfigViewModel(); if (!await configNew.ReadAsync(drive)) { continue; } CurrentConfig = configNew; OperationStatus = "Found FlashAir."; return; } CurrentConfig = null; OperationStatus = "No FlashAir."; } finally { isSearching = false; DelegateCommand.RaiseCanExecuteChanged(); } }
/// <summary> /// Search disks. /// </summary> private async Task SearchAsync() { try { List <DiskInfo> diskRosterPre = null; // Get disk information by WMI. var searchTask = Task.Run(() => DiskSearcher.Search()); try { diskRosterPre = await searchTask; } catch (Exception ex) { Debug.WriteLine("Failed to get disk information by WMI. {0}", ex); if (searchTask.Exception != null) { searchTask.Exception.Flatten().InnerExceptions .ToList() .ForEach(x => Debug.WriteLine(x)); } } if (diskRosterPre == null) { return; } // Sort by PhysicalDrive. diskRosterPre.Sort(); foreach (var infoPre in diskRosterPre) { DiskInfo infoNew = null; // Add disk information by P/Invoke. var physicalDrive = infoPre.PhysicalDrive; var checkTask = Task.Run(() => DiskChecker.GetDiskInfo(physicalDrive)); try { infoNew = await checkTask; } catch (Exception ex) { Debug.WriteLine("Failed to get disk information by P/Invoke. {0}", ex); if (checkTask.Exception != null) { checkTask.Exception.Flatten().InnerExceptions .ToList() .ForEach(x => Debug.WriteLine(x)); } } if (infoNew == null) { infoNew = new DiskInfo { PhysicalDrive = infoPre.PhysicalDrive }; } infoNew.Model = infoPre.Model; infoNew.InterfaceType = infoPre.InterfaceType; infoNew.MediaTypeDiskDrive = infoPre.MediaTypeDiskDrive; infoNew.MediaTypePhysicalDisk = infoPre.MediaTypePhysicalDisk; infoNew.SpindleSpeed = infoPre.SpindleSpeed; infoNew.SizeWMI = infoPre.SizeWMI; // Add disk information to disk roster. int index = 0; if (_diskRoster.Any()) { while ((index < _diskRoster.Count) && (infoNew.PhysicalDrive > _diskRoster[index].PhysicalDrive)) { index++; } } _diskRoster.Insert(index, infoNew); DiskRosterNames.Insert(index, infoNew.NameBus); if (index == 0) { DiskRosterNamesIndex = 0; } } } catch (Exception ex) { Debug.WriteLine("Failed to search disks {0}", ex); } }