如何在程序关闭时强制所有程序线程退出?

时间:2011-10-07 10:18:30

标签: c# multithreading

在关闭主窗口后,如何确保所有程序线程都中止?

6 个答案:

答案 0 :(得分:17)

您可以将“IsBackground”属性设置为true。 CLR在应用程序退出时关闭所有后台线程。

答案 1 :(得分:13)

  • 如果您已经设计好了线程,您应该有一个机制来关闭它们 - 例如使用ManualResetEvent表示关闭
  • 你可以让Thread.Join等到它们关闭,或者Thread.Abort让它们以令人讨厌的方式中止
  • 如果它们是后台线程,它们将在应用程序执行时关闭

另请参阅:http://msdn.microsoft.com/en-us/library/7a2f3ay4(v=vs.80).aspx

答案 2 :(得分:6)

尝试

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

Dispatcher.CurrentDispatcher.Thread.Abort();

答案 3 :(得分:0)

将它们收集到某处,例如

static public List<Thread> AllThreads;

并将该集合逐一用于.Abort()

这是 HARD WRONG 方式。更好的方法是让他们以某种方式停止,然后逐一.Join()

答案 4 :(得分:0)

IsBackground属性设置为true,并添加以下行:

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

CloseMe方法设置一个在线程的主循环中检查的标志。

答案 5 :(得分:-2)

让程序实际关闭,即。不要故意引入任何强制运行主窗口的线程等待任何其他线程的代码。然后,运行主窗口的线程可以自由地使用exitProcess(),然后操作系统将中止进程中的所有其他线程,无论它们在做什么。

RGDS, 马丁