Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > .NET
Перезагрузить страницу C#: прерывание метода в backgroundWorker
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Oxlamon Oxlamon вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.04.2012
По умолчанию C#: прерывание метода в backgroundWorker - 27.01.2015, 13:50

Здравствуйте.

Имеется приложение Windows forms, в нём по нажатию кнопки запускается фоновый процесс, который берёт данные из удалённой sql базы данных, после чего записывает их в excel-файл и прекращается. Операции добычи данных и записи в excel могут длиться довольно долго.
Задача: сделать так, чтобы нажатием другой кнопки можно было прервать этот фоновый процесс, убив всё, что он породил.

Варианты, которые нашёл до сих пор, мне не подходят (в них подразумевается, что backgroundworker работает в цикле). У меня есть метод, который вызывается несколько раз за время работы backgroundworker, и я пробовал засунуть Thread.CurrentThread.Abort() туда, но с отрицательным результатом (приложение замерзает) + метод не вызывается до завершения текущей операции, которая может быть весьма продолжительной.

Каким образом можно прервать выполнение запроса к бд/создание excel-файла?
Ответить с цитированием
  (#2 (permalink)) Старый
Oxlamon Oxlamon вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.04.2012
По умолчанию 27.01.2015, 14:06

Небольшая поправка:
backgroundworker вызывает метод из другого класса. Там же, по идее, находится метод, который должен прерывать backgroundworker.
попытка просто вызвать метод с Thread.CurrentThread.Abort() во время работы воркера приводит к замерзанию.
попытка добавить в метод, работающий в воркере, проверку между операциями на "хочет ли пользователь его прервать" приводит либо к замерзанию, либо ни к чему (если программа ловит ThreadAbortException)

Последний раз редактировалось Oxlamon; 27.01.2015 в 14:11
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывание Plazma Любые вопросы от новичков 3 03.04.2012 00:32
Прерывание зацикливания UnderLine Prolog 31 06.04.2011 12:47
Прерывание выполнения потока Кошмар Python 9 30.10.2007 21:28
Как сделать прерывание биоса Alter Программирование графики 7 25.03.2007 17:47
Прерывание IRQ rass Visual Basic 0 17.12.2006 03:14
Прерывание выполнения SkyHawk C++ Builder 13 14.09.2006 16:01
Как получить в теле метода имя метода imported_nostromo Smalltalk 2 19.07.2006 13:00
Прерывание в Кейл как реализовать Regbist Assembler 1 28.09.2005 12:55
Как сделать прерывание XSergey Железо. Написание драйверов 0 22.09.2005 18:13
Нужно прехватить прерывание 21h imported__Sergey_ Assembler 7 04.06.2005 13:09
Как сделать прерывание rmihail Железо. Написание драйверов 1 11.05.2005 01:44
Прерывание 21, функция 4Bh как реализовать Ailil Assembler 1 11.10.2004 17:40



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов