Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как грамотно уничтожить поток? 
:(
    Опции темы
Demokratizator
Дата 17.5.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 25.7.2006

Репутация: нет
Всего: нет



Добрый день.

как правильно рпервать поток. например обработчик кнопки "отмена" должен убить поток. как это грамотно сделать, не пользуясь Abort();
Код

//Нажатие кнопки отмена - для закрытия потока
private void _btnCancel_Click(object sender, System.EventArgs e)
{
   if ( null != this._threadGenerateAndShow )
   {
       this._threadGenerateAndShow.Abort () ;
       this._threadGenerateAndShow.Join () ;
   }
}

//Функция потока
private void GenerateReportsAsync ()
{
    try
      {
          ...................................................
      }

    catch (Exception ex)
      {
           if (true == this.IsThreadAbortExceptionExists(ex))
             {
                  // пользователь нажал на кнопку отмена, необходимо немедленно прекратить операции...
                  // не отображаем сообщение об ошибке...
             }
           else
             {
                  Errors.ShowError(ex);
             }
       }
    finally
    {

    }
}

PM MAIL   Вверх
ivashkanet
Дата 17.5.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Если поток выполняет бесконечный цикл с нетяжелыми операциями внутри, то лучший вариант --- это наличие флага, который прерывает цикл
Код
while(!cancel){}


Если же у нас нет цикла, либо внутри него выполняется долгая операция, то я ничего не могу придумать лучше, чем try/catch и Abort ().
Вот только я бы посоветовал ловить ThreadAbortException вместо вообще всех Exception и флага.
PM MAIL WWW ICQ   Вверх
QryStaL
Дата 17.5.2007, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



Thread.Abort() можно считать вполне грамотным способом убить поток. Как вариант, можно использовать класс BackgroundWorker.


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0434 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.