2013-07-26 2 views
2

При закрытии приложения, как лучше всего закрыть потоки переднего плана одновременно?Правильный способ закрыть переднюю нить

Из всех моих исследований, это, кажется, что лучший способ установить IsBackground к истинным ..

Правильно ли это или есть способ лучше? Я скептически отношусь к тому, что он, похоже, не соответствует стандартным шаблонам имен методов Microsoft.

+1

Если ваш код может произвольно решить, что пришло время выключить программу и просто вывести все потоки переднего плана, это указывает на то, что эти потоки должны были быть фоновыми потоками в первую очередь. –

+0

Посмотрите здесь http://stackoverflow.com/questions/6062527/how-to-kill-thread-on-exit или http://stackoverflow.com/questions/2688923/how-to-close-all-running -threads –

+0

@Damien_The_Unbeliever - Я согласен с тобой там, он подошел к разговору по другому вопросу о силе, закрывающей приложение. – Sayse

ответ

1

Это, безусловно, будет работать, CLR будет abort такой поток, когда ваш основной запуск завершается. Довольно похоже на использование Thread.Abort(), за вычетом жестких отказов, которые вы обычно испытываете при использовании Abort(). Это грубое прерывание, нет ничего, что сама нить может сделать, чтобы остановить его. И не будет больше кода, который запускается впоследствии, который может выйти из строя из-за типичных проблем, которые вы получили от Abort(), как тупик. Кроме финализаторов.

Вызов его «правильный», однако, немного растягивается, нет ничего, что может сделать поток, чтобы закончить чисто. Что может быть вредным, если оно имеет внешне наблюдаемое поведение. Как обновление dbase, разговор по сокету или запись файла. Это тоже грубо прервано, потенциально оставляя запутанный сервер или полузаписанный файл, который может вызвать проблемы позже. Смягчающим обстоятельством является то, что это также произойдет, когда ваша программа умрет от необработанного исключения, вы ожидаете, что это тоже не вызовет проблемы. Это зависит :)

+0

Полностью согласен с этим (а также с другими оцененными комментариями!) Нить должна быть предоставлена ​​каждой возможностью, чтобы закрыть ее самостоятельно, я полагаю, что я искал наименее разрушительный способ закрыть поток, если потребуется, примет это позже на сегодня. Еще раз спасибо, Ханс – Sayse

Смежные вопросы