Поток, который обрабатывает WinForm, блокируется, когда я запускаю какую-то задачу параллельно - PullRequest
0 голосов
/ 05 мая 2020

всем! Итак, у меня есть форма, в которой есть BackgroundWorker и TextBox. Когда я нажимаю btn, вызывается worker.RunWorkerAsyn c (), и в случае DoWork я действительно запускаю некоторые вложенные циклы Parallel.ForEach (). Эти циклы выполняют некоторые вычисления, в результате которых изменяется значение текстового поля, поэтому в этих циклах я вызываю worker.ReportProgress (0, textBoxValue), который запускает событие progressChanged (отправитель, ProgressChangedEventArgs), и когда я обрабатываю это событие, я просто меняю значение textBox, на котором было передается в аргументах события. Итак, моя проблема в том, что вся форма иногда активна, а значения текстового поля обновляются, а иногда нет. Вот мой код выглядит так.

public class Form{
 BackgroundWorker worker = new BackgroundWorker();
 TextBox textBox = new TextBox();
 RichTextBox rb = new RixhTextBox();
 public Form(){
   worker.DoWork += DoWork;
   worker.ProgressChanged += ProgressChanged;
   worker.RunWorkerCompleted += WorkerCompleted;
   worker.WorkerReportsProgress = true;
   worker.WorkerSupportsCancellation = true;

   worker.runWorkerAsync();
 }
 private void DoWork(object sender,DoWorkEventArgs e){
  Parallel.ForEach(list,item =>{
   //some work
   Parallel.ForEach(list2,item2=>{
    //some work
    worker.ReportProgress(0,param);
   }
  }

  private void ProgressChanged(object sender, ProgressChangedEventArgs e){
   //update richtextbox
   //update textbox
  }
 }
}

пожалуйста, дайте мне несколько советов, как отладить эту ситуацию? Отредактировано: richtextbox обновляется правильно, но с неактивного

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...