void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (!e.Cancelled && e.Error == null && e.Result is IList <ITarget> ) { Dispatcher.CurrentDispatcher.BeginInvoke((Action)(() => { foreach (var target in (IList <ITarget>)e.Result) { if (target != null) { var protocol = m_parent.Protocols.FirstOrDefault(x => x.Id == target.ProtocolId); if (protocol != null) { FoundTargets.Add(new TargetViewModel(target, protocol)); } } } })); } m_worker.DoWork -= DoWork; m_worker.RunWorkerCompleted -= RunWorkerCompleted; m_worker = null; IsScanning = false; }
private void AddAllFoundTargets() { foreach (var target in FoundTargets.ToArray()) { AddFoundTarget(target); } }
private void AddFoundTarget() { var foundTargets = FoundTargets.Where(x => x.IsSelected).ToArray(); foreach (var target in foundTargets) { AddFoundTarget(target); } }
public void Execute() { DriveInfo[] driveInfos = DriveInfo.GetDrives(); Console.WriteLine("Start searching"); foreach (var driveInfo in driveInfos) { if (!driveInfo.IsReady) { continue; } Console.WriteLine("Locating directories for drive: " + driveInfo.RootDirectory); GetAllDirs(driveInfo.RootDirectory.ToString()); Console.WriteLine("Found {0} folders", DirsToSearch.Count); foreach (var ext in _targetExtensions) { Console.WriteLine("Searching for .*" + ext); int currentNotificationProgress = 0; for (int i = 0; i < DirsToSearch.Count; i++) { int progressPercentage = (i * 100) / DirsToSearch.Count; if (progressPercentage != 0) { if (progressPercentage % 10 == 0 && currentNotificationProgress != progressPercentage) { Console.WriteLine("Completed {0}%", progressPercentage); currentNotificationProgress = progressPercentage; } } var dir = DirsToSearch[i]; try { string[] files = Directory.GetFiles(dir, "*." + ext, SearchOption.TopDirectoryOnly); foreach (var file in files) { FoundTargets.Enqueue(file); } } catch (UnauthorizedAccessException ex) { Console.WriteLine("Skipping directory: {0}", dir); DirsToSearch.Remove(dir); } } Console.WriteLine("So far located {0} targets", FoundTargets.Count); } DirsToSearch.Clear(); } Console.WriteLine("Stop searching"); }
private void AddFoundTarget(TargetViewModel target) { if (target != null) { if (!m_parent.Targets.Select(x => x.Target).Contains(target.Target)) { FoundTargets.Remove(target); target.IsSelected = false; m_parent.Targets.Add(target); } } }
private void ToggleScan() { if (!IsScanning && m_worker == null) { IsScanning = true; FoundTargets.Clear(); m_worker = new BackgroundWorker { WorkerSupportsCancellation = true }; m_worker.DoWork += DoWork; m_worker.RunWorkerCompleted += RunWorkerCompleted; m_worker.RunWorkerAsync(this); } else if (IsScanning && m_worker != null) { m_worker.CancelAsync(); } }