Создание в background_worker пул потоков - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет!!! столкнулся с проблемой не могу решить, вот допустим мы считываем все текстовые файлы, которые находятся в папке, эту работу удобно переложить на background_worker, а можно ли по мере того как мы находим файлы производить их обработку в thread_pool, при этом чтобы background worker не подвисал, то еcть чтобы он дорабатывал и вызывал бы backgroundWorker1_RunWorkerCompleted, в то время как работа в пулах потоков бы всё ещё шла? написал такой примерно код, но он падает :
Листинг программы
  1. private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  2. {
  3. String res = (String)e.Argument;
  4. var nameFiles = Directory.EnumerateFiles(res);
  5. int i = 0;
  6. foreach (string file in nameFiles)
  7. {
  8. i++;
  9. loadFiles(file);
  10. backgroundWorker1.ReportProgress(i * 5);
  11. }
  12. }
  13. private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
  14. {
  15. progressBar1.Value = e.ProgressPercentage;
  16. this.Text = e.ProgressPercentage.ToString();
  17. }
  18. private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  19. {
  20. progressBar1.Value = 100;
  21. }
  22. private void loadFiles(string file)
  23. {
  24. ManualResetEvent ev = new ManualResetEvent(false);
  25. MyAsyncInfo info = new MyAsyncInfo();
  26. info.fileName = file;
  27. ThreadPool.QueueUserWorkItem((object obj) =>
  28. {
  29. callBackLoad(info); // тут загружаем данные в память
  30. ev.Set();
  31. });
  32. ev.WaitOne();
  33. ManualResetEvent even = new ManualResetEvent(false);
  34. ThreadPool.QueueUserWorkItem((object obj) =>
  35. {
  36. handle(info); // тут обрабатываем данные и сохраняем в другой файл
  37. even.Set();
  38. });
  39. even.WaitOne();
  40. }
я вообще как понимаю как должен он работать : при вызове метода loadFiles - мы создаем поток который хранит и ожидает пула потоков. Может кто сталкивался с данной проблемой? Помогите пожалуйста!!! Всем спасибо за внимание!!!

Решение задачи: «Создание в background_worker пул потоков»

textual
Листинг программы
  1. List<string> processedFiles = new List<string>();
  2.  
  3. private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  4. {
  5.     processedFiles.Clear();
  6.  
  7.     var nameFiles = Directory.EnumerateFiles((string)e.Argument);
  8.     int i = 0;
  9.     foreach (string file in nameFiles)
  10.     {
  11.         ThreadPool.QueueUserWorkItem(loadFiles, file);
  12.        
  13.         i++;
  14.         backgroundWorker1.ReportProgress(i * 5);
  15.     }
  16. }
  17.  
  18. private void loadFiles(object state)
  19. {
  20.     string file = (string)state;
  21.     callBackLoad(file);
  22.     handle(file);
  23.  
  24.     lock (processedFiles) processedFiles.Add(file);
  25. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут