
15.02.2009, 16:24
|
|
Постоянный
Регистрация: 07.06.2006
Сообщений: 556
С нами:
10487846
Репутация:
2702
|
|
Сообщение от ChaaK
Как остановить background worker? Стандартным методом не хочет останавливать =(. Хочет, чтобы я переопределил метод. Как это сделать правильно?
P.S SetConsoleDisplayMode на висте при больших разрешениях экрана не отображает.
метод CancelAsync() запрашивает остановку а не производит её. То есть фактически этот метод устанавливает поле CancellationPending равным true.
Чтобы остановить поток, нужно в рабочем потоке прописать следующее:
(bgWorker - статическая инстанция BackgroundWorker())
private void bgWorker_Work(object sender, DoWorkEventArgs e) // Событие DoWork
{
if (bgWorker.CancellationPending) {
e.Cancel = true;
} else {
// ресурсоёмкая операция
}
}
Зачем из любого метода (например, обработчика события нажатия кнопки Отмена) запрашиваем отмену:
if (bgWorker != null) {
if (bgWorker.IsBusy == true) {
bgWorker.CancelAsync();
}
}
|
|
|