#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);