private void SearchWorkerDoWork(object sender, DoWorkEventArgs e) { var worker = sender as BackgroundWorker; var path = e.Argument as string; if (string.IsNullOrEmpty(path) || !Directory.Exists(path)) { return; } SearchWorker.ReportProgress(0, "Enumerating folders..."); var folders = new ParallelWalk().GetFolders(path); //SafeWalker.GetFolders(path); SearchWorker.ReportProgress(0, string.Format("Processing folders 0/{0}...", folders.Length)); var processed = 0; float total = folders.Length; var statusInterval = folders.Length / 100; if (worker.CancellationPending) { return; } Parallel.For(0L, folders.Length, i => { if (worker.CancellationPending) { return; } var folder = ProcessFolder(folders[(int)i]); if (folder.Size > 0) { _result.Add(folder); } Interlocked.Add(ref processed, 1); if (statusInterval > 0 && processed % statusInterval == 0) { SearchWorker.ReportProgress((int)((processed / total) * 100.0), "Processing folders (" + processed + "/" + total + ")..."); } }); SearchWorker.ReportProgress((int)((processed / total) * 100.0), "Sorting folders..."); _result.Sort(); }
private void SearchWorkerDoWork(object sender, DoWorkEventArgs e) { var worker = sender as BackgroundWorker; var path = e.Argument as string; if (string.IsNullOrEmpty(path) || !Directory.Exists(path)) return; SearchWorker.ReportProgress(0, "Enumerating folders..."); var folders = new ParallelWalk().GetFolders(path);//SafeWalker.GetFolders(path); SearchWorker.ReportProgress(0, string.Format("Processing folders 0/{0}...", folders.Length)); var processed = 0; float total = folders.Length; var statusInterval = folders.Length / 100; if (worker.CancellationPending) return; Parallel.For(0L, folders.Length, i => { if (worker.CancellationPending) return; var folder = ProcessFolder(folders[(int)i]); if (folder.Size > 0) _result.Add(folder); Interlocked.Add(ref processed, 1); if (statusInterval > 0 && processed % statusInterval == 0) SearchWorker.ReportProgress((int)((processed / total) * 100.0), "Processing folders (" + processed + "/" + total + ")..."); }); SearchWorker.ReportProgress((int)((processed / total) * 100.0), "Sorting folders..."); _result.Sort(); }