| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > C#: работа с потоками |
| Автор: Socrates 25.6.2012, 23:32 |
| Друзья, нужен ваш совет. В программе два потока. Первый управляет GUI, это основной поток. Второй - фоновый, BackgroundWorker. Вопрос такой: нужно, чтобы нажатие GUI-кнопки сразу же останавливало BackgroundWorker. Как его лучше всего "убить"? |
| Автор: Fortnox 26.6.2012, 07:24 |
| Использовать метод http://msdn.microsoft.com/ru-ru/library/system.componentmodel.backgroundworker.cancelasync.aspx у BackgroundWorker. Только следует учесть, что этот метод не останавливает сразу работу фонового потока, а лишь посылает сообщение worker'у (устанавливает флаг CancellationPending в true), а вы уже, в рабочем коде, должны проверять этот флаг. |
| Автор: Socrates 26.6.2012, 09:12 |
| Fortnox, спасибо большое! Значит без проверки флага вручную не обойтись. Трудность в том, что BackgroundWorker последовательно выполняет 10-минутные действия. Если флаг проверять один раз в 10 минут, юзеру придется долго ждать, пока BackgroundWorker остановится и можно будет начать новый. Получается, что нужно каким-то образом вставить проверки флага внутрь этих 10-минутных функций. Вот бы было можно моментально остановить BackgroundWorker без лишних телодвижений |
| Автор: Fortnox 26.6.2012, 09:24 |
| Можно, для этого в Background Worker сохряняется рабочий поток в переменную, чтобы потом вызвать Abort у него. http://osherove.com/blog/2005/11/9/creating-a-better-backgroundworker-cancelimmediately-and-oth.html |
| Автор: Socrates 26.6.2012, 20:12 | ||
Fortnox, Спасибо!! Буду изучать пример. |