Как остановить фоновую работу и установить для IsBusy значение false?C#

Место общения программистов C#
Ответить
Гость
 Как остановить фоновую работу и установить для IsBusy значение false?

Сообщение Гость »


Я запустил фонового работника в Winforms с помощью

Код: Выделить всё

RunWorkerAsync(). Этот работник проходит через конечный автомат и выполняет некоторую работу. У меня есть кнопка «Отмена» в форме, которая должна остановить работника; я делаю это сCancelAsync()
.
Проблема в том, что я использую свойство, чтобы проверить, запущен ли фоновый рабочий процесс перед его запуском, но при вызове

Код: Выделить всё

CancelAsync()
, это свойство остается

Код: Выделить всё

true. Итак, когда я пытаюсь перезапустить работника, он не запускается, поскольку логика считает, что он все еще работает.
Я пытался использоватьApplication.DoEvents()
в цикле while после запуска работника, чтобы форма оставалась отзывчивой, но это не устранило проблему.
Я также попробовал установить явно имеет значение false, но, насколько я понимаю, это свойство доступно только для чтения.
Насколько я понимаю, устанавливается в значение false только после того, как фоновый рабочий процесс завершил свою работу, что означает, что использование

Код: Выделить всё

CancelAsync()
не установит для свойства значение false, поскольку технически это не завершает работу работника.
Есть ли обходной путь или я неправильно понимаю? p>

Код: Выделить всё

private void buttonStart_Click(object sender, EventArgs e)
{
if (!backgroundWorker1.IsBusy)
{
backgroundWorker1.RunWorkerAsync();
buttonStart.Enabled = false;
}
}

private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
BackgroundWorker worker = (BackgroundWorker)sender;

while (!worker.CancellationPending)
{
...
}
}

private void buttonCancel_Click(object sender, EventArgs e)
{
if (backgroundWorker1.WorkerSupportsCancellation && backgroundWorker1.IsBusy)
{
backgroundWorker1.CancelAsync();
buttonStart.Enabled = true;
}
}


Источник: https://stackoverflow.com/questions/781 ... y-to-false
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»