static void Main(string[] args) { try { Searcher searcher = new Searcher("*.txt"); searcher.DoSearch(); while (!searcher.IsCompleted) { }; Console.WriteLine("Files count: {0}", searcher.FileCount); } catch (Exception e) { Console.WriteLine("Error has occured: {0}", e.Message); } catch { Console.WriteLine("Unknowne error has occured."); } }
private void stopButton_Click(object sender, EventArgs e) { // Stop the search thread if it is running: Searcher.Stop(); }
//Метод класса Form2 который реализует многопоточность private void DoItParalell(DirectoryInfo di) { //если в директории есть вложенные папки выполнится следующий код if (di.GetDirectories().Length != 0) { //создадим новый список екземпляров поискового класса Searchers = new List <Searcher>(); //создадим новый список потоков Threads = new List <Thread>(); //для каждой папки в корневой выполним создание поискового класса и потока foreach (DirectoryInfo subdir in di.GetDirectories()) { Searcher s1 = new Searcher(subdir, this.FileName, this.BegDate, this.EndDate, this.MinSize, this.MaxSize); this.Searchers.Add(s1); Thread t1 = new Thread(new ThreadStart(s1.StartSearch)); this.Threads.Add(t1); } //запускаем потоки на выполнение foreach (Thread item in this.Threads) { item.Start(); } //ждем завершения работы всех потоков while (true) { int endCount = 0; foreach (Thread item in this.Threads) { //проверка состояния потока if (item.ThreadState == ThreadState.Running) { endCount++; } } //если вторичных потоков больше нет основной поток продолжает работу if (endCount == 0) { break; } } int counter = 0; //Для каждого поискового класса читаем список найденных файлов foreach (Searcher si in Searchers) { //Добавляем информацию про каждый полученный файл в список на форме foreach (FileInfo fi in si.FindedFiles) { this.listView1.Items.Add(fi.Name); this.listView1.Items[counter].SubItems.Add(fi.DirectoryName); this.listView1.Items[counter].SubItems.Add((fi.Length / 1000).ToString()); this.listView1.Items[counter].SubItems.Add(fi.CreationTime.ToString()); counter++; } } //Создаем екземпляр поискового класса для поиска в корен дисков/входных директорий Searcher ls = new Searcher(di, this.FileName, this.BegDate, this.EndDate, this.MinSize, this.MaxSize); //Ищем файлы только внутри корневой директории List <FileInfo> localsFile = ls.SearchFile(di); //Добавляем найденные файлы в визуальный список на форме foreach (FileInfo fi in localsFile) { this.listView1.Items.Add(fi.Name); this.listView1.Items[counter].SubItems.Add(fi.DirectoryName); this.listView1.Items[counter].SubItems.Add((fi.Length / 10).ToString()); this.listView1.Items[counter].SubItems.Add(fi.CreationTime.ToString()); counter++; } //Выводим сообщение о количестве отысканных файлов this.lbProgress.Text = "Done!" + " Finded " + listView1.Items.Count + " files."; //Если файлов в поисковых классах не обнаружено в метку на форме //выводится сообщение "File not found" if (counter == 0) { this.lbProgress.Text = "File not found"; } } else { //Создается единый екземпляр класс Searcher Searcher singleSearch = new Searcher(di, this.FileName, this.BegDate, this.EndDate, this.MinSize, this.MaxSize); //Проводится поиск в одном потоке singleSearch.StartSearch(); int counter = 0; //Получаем все отысканные файлы и выводим в список на форме foreach (FileInfo fi in singleSearch.FindedFiles) { this.listView1.Items.Add(fi.Name); this.listView1.Items[counter].SubItems.Add(fi.DirectoryName); this.listView1.Items[counter].SubItems.Add((fi.Length / 100).ToString()); this.listView1.Items[counter].SubItems.Add(fi.CreationTime.ToString()); counter++; this.lbProgress.Text = "Done!"; } //Если файлы не найдены - выводим сообщение if (counter == 0) { this.lbProgress.Text = "File not found"; } } }
private void stopButton_Click(object sender, EventArgs e) { Searcher.Stop(); }