Как убить поток при выходе?

#c# #winforms

#c# #winforms

Вопрос:

Кнопка в родительской форме используется для запуска потока. Если родительская форма закрыта в среде разработки, поток продолжает выполняться в фоновом режиме, предотвращая внесение изменений в исходный код на 64-разрядной платформе Windows 7. Поток должен быть уничтожен меню> Отладка> Остановить отладку. Какой правильный способ программно прервать поток, когда родительская форма закрыта?

 private void buttonW_Click(object sender, EventArgs e)
{
    Thread t = new Thread(Main.MyThread);
    t.Start();
}

private static void MyThread()
{
    ...
}
  

Ответ №1:

Если вы хотите, чтобы приложение завершало работу после завершения основного потока, вы можете просто сделать новый поток фоновым потоком:

 Thread t = new Thread(Main.MyThread);
t.IsBackground = true;
t.Start();
  

В основном процесс завершится, когда завершатся все потоки переднего плана.

Обратите внимание, что это может быть плохой новостью, если фоновый поток записывает файл, когда форма закрыта, или что-то подобное…

Комментарии:

1. Я не могу поверить, что я всегда сохранял стек потоков в основном потоке и выполнял итерации по нему, чтобы закрыть их все.

2. Идеальный. Спасибо. Кстати: только начинаю читать вашу книгу.

3. @JackN: Рад помочь. Надеюсь, вам понравится книга 🙂

4. @Bruno ручная остановка вашего потока по-прежнему обычно является хорошей идеей, поскольку таким образом вы можете изящно остановить их.

Ответ №2:

Environment.Exit(0) завершает этот процесс и предоставляет базовой операционной системе указанный код выхода. Он чаще используется в консольных приложениях.

 Environment.Exit(0);