PDA

Просмотр полной версии : [Помогите!] Thread ---- КАК ПРЕРВАТЬ В ФОНЕ?????


fesssi
30.07.2011, 23:38
Народ если я отдельно запустил поток в фоновом режиме. Где он работает. КАК ЕГО остановить принудительно!!!!!!!?????????????

Вот пример запуска:
Thread potok = new Thread(start_start);
potok.Start();

И он в в этом методе пашет в реальном времени.
Как его остановить????

Сразу говорю тупо АБОРТОМ нельзя.
Особенно если в это время он ожидает ответа от сервера....

Пожалуйста ваши варианты......

J-Fobos
30.07.2011, 23:52
Функция TerminateThread. Только надо помнить, что для локальных объектов не будут вызваны деструкторы. Лучше всего, когда поток завершается сам.

И как это "поток в фоновом режиме"? Впервые сталкиваюсь с таким :)

MCseller
31.07.2011, 00:29
Функция TerminateThread. Только надо помнить, что для локальных объектов не будут вызваны деструкторы. Лучше всего, когда поток завершается сам.

И как это "поток в фоновом режиме"? Впервые сталкиваюсь с таким :)

Скорее всего это элемент backgroundWorker в Visual Studio.

Hermein
31.07.2011, 03:24
Скорее всего это элемент backgroundWorker в Visual Studio.

при чем тут воркер?-если написали фоновый поток?
вообще то в C# хорошо развита многопоточность, а воркер-это так детская игрушка /problem

юзай WaitHandle /problem
или еще проще так:

private void button1_Click(object sender, EventArgs e)
{
StopThread();
}
private void StopThread()
{
thread.Abort();//прерываем поток
thread.Join(500);//таймаут на завершение
}

MCseller
31.07.2011, 12:55
при чем тут воркер?-если написали фоновый поток?
вообще то в C# хорошо развита многопоточность, а воркер-это так детская игрушка /problem

юзай WaitHandle /problem
или еще проще так:

private void button1_Click(object sender, EventArgs e)
{
StopThread();
}
private void StopThread()
{
thread.Abort();//прерываем поток
thread.Join(500);//таймаут на завершение
}

Воркер выполняет работу в отдельном потоке, при использовании воркера даже Exception выпадает, когда из него мы пытаемся сделать что либо что делается в другом потоке(например махинации с GUI), не ?

Hermein
31.07.2011, 19:01
Хорош ерунду писать если не понимаете о чем речь!

1) Читаем внимательно пост 1 - где вы увидели воркер? ТС даже пример кода дал на запуск 1 фонового потока!
2) Что конкретно написано?-приостановить или прервать???

fesssi
12.08.2011, 16:00
Народ сори что возвращаюсь к вопросу...
Всем спасибо за ответы. Только с моря приехал....
Вот в чом проблема если поточней.
Например запускается 25 потоков где идут пост запросы через прокси. Если прокси гуд то запрос проходит и поток берет другой логин:пароль.
Но если прокси дохлая то поток висит на открытом порте в винде где то 5 минут. И прервать его тупо АБОРТОМ нельзя. Он там остается а потом уже по тайм ауту завершается.


Вопрос в том как его гада там убить...????????

Выход нашел только один.. НЕТ ответа по тайм ауту заранее установленном сразу считать ошибкой и пропускать...

.AsTex.
12.08.2011, 17:38
А теперь пару поправлений: данный код - не фоновый поток,потому-что если вы закроете программу а у работа потока еще не будет окончена,то у вас будет висеть процесс.
Чтобы этого избежать вот:

Thread potok = new Thread(start_start);
potok.IsBackground = true;//на WinForms может отличаться(пишу на WPF)

fesssi
12.08.2011, 20:56
А теперь пару поправлений: данный код - не фоновый поток,потому-что если вы закроете программу а у работа потока еще не будет окончена,то у вас будет висеть процесс.
Чтобы этого избежать вот:

Thread potok = new Thread(start_start);
potok.IsBackground = true;//на WinForms может отличаться(пишу на WPF)

Спасибо большое. Вопрос считаю закрытым....

Всем тоже огромное спасибо.