杀死应用程序打开的所有线程

时间:2011-02-15 10:12:33

标签: c# .net j#

我有一些非常大的应用程序混合使用c#和j#。

有时当我关闭它时,有些线程没有关闭,它们挂在任务管理器中,不可能从那里杀死它们。

找到所有这些线程并将它们添加到结束事件中我真的有问题。

是否有某种方法会猛烈杀死关闭事件中应用程序打开的所有线程?...

感谢。

是否有一些工具可以告诉我在关闭应用程序时打开了哪些线程?是谁打开了它们?

7 个答案:

答案 0 :(得分:49)

这个不应该发生,如果是的话,你试图以错误的方式解决它。

当您的应用程序退出时,.NET Framework将自动终止IsBackground property设置为“True”的所有线程。将每个工作线程指定为后台线程,您将不再遇到此问题。利用自动创建后台线程的BackgroundWorker classThreadPool class是一个更好的选择。

否则,您需要明确清理前台线程。设计合理的应用程序将执行自己的簿记,并具有确定性的结构化方法,以确保在退出Main方法之前已关闭其所有线程。如果您的线程需要正常终止,那么您应该无论如何

杀死这个过程是一个非常糟糕的主意,因为让你的线程在你的应用程序中不知不觉地运行。

答案 1 :(得分:14)

您可以使用:Environment.Exit(0); ,如果线程正在运行并且不会导致任何问题,那将关闭应用程序。

答案 2 :(得分:5)

你应该优雅地关闭你的线程,但只是希望你和其他人知道不推荐但可能的方式:

OnClose处理程序上的

System.Diagnostics.Process.GetCurrentProcess().Kill();

我完全喜欢Cody Gray的做法。

答案 3 :(得分:4)

好吧,你可以打电话给Application.Exit(),但这不会有太大帮助。 最重要的是,如果你想正确地做事,你必须自己优雅地关闭所有线程。

答案 4 :(得分:0)

我的2美分......所有答案......

尝试强制SHUTDOWN

加入void CurrentApplication_Exit(object sender, ExitEventArgs e)private void Window_Closing(object sender, CancelEventArgs e)这些行

System.Windows.Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
System.Windows.Application.Current.Shutdown();

答案 5 :(得分:0)

internal void Close()
{
    Dispatcher.CurrentDispatcher.Thread.Abort();
    Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
    Application.Current.Shutdown();
}

答案 6 :(得分:0)

我在关闭表格/申请时遇到了类似的问题。它并没有真正退出调试模式,而是进入了设计模式。以下解决了我的问题。

  1. 关注链接。 Windows Form Application, Thread won't stop
  2. 第一步未解决。  Environment.Exit(0); -解决并正常工作。