Я запустил фонового работника в Winforms с помощью
Код: Выделить всё
RunWorkerAsync(). Этот работник проходит через конечный автомат и выполняет некоторую работу. У меня есть кнопка «Отмена» в форме, которая должна остановить работника; я делаю это сCancelAsync()Проблема в том, что я использую свойство
Код: Выделить всё
IsBusyКод: Выделить всё
CancelAsync()Код: Выделить всё
true. Итак, когда я пытаюсь перезапустить работника, он не запускается, поскольку логика считает, что он все еще работает.
Я пытался использоватьApplication.DoEvents()Я также попробовал установить
Код: Выделить всё
IsBusyНасколько я понимаю,
Код: Выделить всё
IsBusyКод: Выделить всё
CancelAsync()Есть ли обходной путь или я неправильно понимаю? 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
Мобильная версия