在关闭主窗口后,如何确保所有程序线程都中止?
答案 0 :(得分:17)
您可以将“IsBackground”属性设置为true。 CLR在应用程序退出时关闭所有后台线程。
答案 1 :(得分:13)
ManualResetEvent
表示关闭另请参阅: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, 马丁