Подтвердить что ты не робот

Как заставить все потоки программ выходить из программы при закрытии программы?

Как я могу гарантировать, что все потоки программы прекратятся после закрытия главного окна?

4b9b3361

Ответ 1

  • Если вы хорошо спроектировали поток, у вас должен быть механизм для их закрытия - например, используйте ManualResetEvent, чтобы сигнализировать им о закрытии
  • Вы можете Thread.Join подождать, пока они закрываются, или Thread.Abort, чтобы они отменили неприятный путь.
  • Если они являются фоновыми потоками, они закрываются, когда приложение выполняет

Смотрите также: http://msdn.microsoft.com/en-us/library/7a2f3ay4(v=vs.80).aspx

Ответ 2

Вы можете установить для свойства IsBackground значение true. CLR закрывает все фоновые потоки, когда приложение завершает работу.

Ответ 3

Попробуйте

Application.ExitThread();
Environment.Exit(0);

или

Dispatcher.CurrentDispatcher.Thread.Abort();

Ответ 4

Соберите их где-нибудь, например

static public List<Thread> AllThreads;

и используйте эту коллекцию для .Abort(), один за другим.

Это ТРУДНО И НЕПРАВИЛЬНО. Лучше было бы сигнализировать им как-то остановиться, а затем .Join() один за другим.

Ответ 5

Задайте для свойства IsBackground значение true и добавьте следующие строки:

AppDomain.CurrentDomain.ProcessExit += CloseMe; // for the main process
AppDomain.CurrentDomain.DomainUnload += CloseMe; // for ApplicationDomains

Пусть метод CloseMe устанавливает флаг, который проверяется в основном контуре потока.

Ответ 6

Позволяя программе фактически закрыть, т.е. не намеренно вводить любой код, который заставляет поток, который запускает основное окно, ждать каких-либо других потоков. Затем поток, который запускает основное окно, будет свободен для выхода из процессаProcess(), и тогда ОС прекратит все остальные потоки вашего процесса, независимо от того, что они делают.

Rgds, Мартин