Возвращение из фоновых рабочих - PullRequest
0 голосов
/ 11 июля 2011

Я работаю над фоновыми работниками.Это то, что мне нужно сделать: вернуться из фонового работника, чтобы он вернулся в основной поток программы.Я использую приложение формы Windows, и после отмены фонового работника элемент управления должен быть возвращен обратно в форму, чтобы я мог снова вызвать ту же функцию.

Я добавил пример кода, так как код, который я использую внутрицикл while довольно большой.

void funtion1()    
{
  while(true)
  {
    if(backgroundWorker1->CancellationPending)
    {
       e->Cancel = true;
       return ;
    }
  }
}

Примечание. В настоящее время, когда я выполняю ту же работу после остановки функции, возвращается System.NullReferenceException. Я также заметил, что мое событие DOWORK () работает нормально.

Мне требуется остановить фоновый рабочий на backgroundWorker1->CancelAsync(); и снова запустить ту же функцию, используя backgroundWorker1->RunWorkerAsync();.

Однако, когда я вызываю ту же функцию с фоновым рабочим, системабросает System.NullReferenceException.

Почему выбрасывается System.NullReferenceException и как я могу это исправить?

1 Ответ

1 голос
/ 12 июля 2011

Фоновый поток работает независимо от потока, который его запустил. Основной поток будет продолжен сразу после запуска другого потока.

Если вы хотите что-то сделать после завершения фонового рабочего, вы можете обработать событие WorkerCompleted.

Кроме того, ваш код неверен.

Код в вашем обработчике событий DoWork будет прослушивать CancelationPending. Основной поток вызывает Cancel на BW, который устанавливает CancelationPending.

Вы должны прочитать о BW здесь: http://msdn.microsoft.com/en-us/library/8xs8549b.aspx

...