public static void StartSearch(SearchArguments arguments) { lock (searchLockObject) { if (state != SearchState.Ready) { return; } state = SearchState.Running; if (StateChanged != null) { StateChanged(state, Transition.Started); } } lastSearchThread = new Thread(delegate() { Search(arguments); SearchState stoppingState = state; state = SearchState.Ready; if (StateChanged != null) { StateChanged(state, stoppingState == SearchState.Stopping ? Transition.Cancelled : Transition.Complete); } }); lastSearchThread.IsBackground = true; lastSearchThread.Start(); }
private static void Search(SearchArguments arguments) { try { Search(new DirectoryInfo(arguments.Folder), arguments); } catch (Exception ex) { state = SearchState.Stopping; if (SearchError != null) { SearchError(ex); } } }
private static void Search(DirectoryInfo dir, SearchArguments arguments) { if (state != SearchState.Running) { return; } if (SearchProgressed != null) { SearchProgressed(dir.FullName); } try { FileInfo[] files = dir.GetFiles(arguments.NameSearch); foreach (FileInfo file in files) { if (state != SearchState.Running) { return; } if (string.IsNullOrEmpty(arguments.ContentSearch)) { if (ResultFound != null) { ResultFound(new SearchResult(file.FullName)); } continue; } else { try { string contentSearch = arguments.ContentSearch.ToLower(); using (StreamReader sire = new StreamReader(file.FullName)) { for (string line = sire.ReadLine(); line != null; line = sire.ReadLine()) { if (state != SearchState.Running) { return; } if (line.ToLower().Contains(contentSearch)) { if (ResultFound != null) { ResultFound(new SearchResult(file.FullName)); } break; } } } } catch (IOException) { } } } DirectoryInfo[] subDirs = dir.GetDirectories(); foreach (DirectoryInfo subDir in subDirs) { Search(subDir, arguments); } } catch (UnauthorizedAccessException) { return; } }