繁体   English   中英

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

[英]How can I force all program threads to exit on program close?

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

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

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

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

尝试

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

要么

Dispatcher.CurrentDispatcher.Thread.Abort();

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

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

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

将它们收集到某处,例如

static public List<Thread> AllThreads;

并将该集合.Abort()用于.Abort()它们。

这是艰难错误的方式。 更好的方法是让他们以某种方式停止,然后一个接一个地进行.Join()

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

Rgds,马丁

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM