无论线程如何完全杀死应用程序

时间:2014-03-27 02:59:50

标签: c# wpf multithreading exit kill-process

启动时我的应用程序可能同时启动一些线程。现在基于某些条件,我想完全杀死所有线程,无论其他线程的状态如何。

我已尝试App.Current.ShutDown()以及Application.Current.ShutDown但不起作用?

4 个答案:

答案 0 :(得分:3)

你可以尝试

Environment.Exit(0);

您可以使用here

中的任何代码替换0

您应该看到Killing all threads that opened by application(以及Shutting down a multithreaded application因此我认为他提供了一些可靠的建议。

答案 1 :(得分:3)

线程是后台线程或前台线程。后台线程与前台线程相同,除了后台线程不会阻止进程终止。一旦属于进程的所有前台线程终止,公共语言运行库就结束该进程。任何剩余的后台线程都会停止并且不会完成。

设置主题的属性IsBackground=true

var t= new Thread();
t.IsBackground = true;

另见: How to: Create and Terminate Threads (C# Programming Guide)

答案 2 :(得分:3)

如果您需要终止正在运行的应用程序,无论状态如何,您都可以使用

Environment.Exit(0); // use -1 if you're exiting with an error, exiting with 0 is considered to have exited without errors.

或者如果你真的想使用锤子

Environment.FailFast()

FailFast的文档说: 在将消息写入Windows应用程序事件日志后立即终止进程,然后将错误报告中的消息包含在Microsoft中。

如果应用程序的状态损坏无法修复,则使用FailFast方法而不是Exit方法终止应用程序,并且执行应用程序的try / finally块和终结器将损坏程序资源。

答案 3 :(得分:2)

如果你的其他线程是后台线程,它们将结束(即当你关闭在唯一前台线程上运行的WPF应用程序时静默中止):

来自MSDN

  

“...后台线程不会阻止进程终止。一旦属于进程的所有前台线程都已终止,公共语言运行库就会结束进程。任何剩余的后台线程都会停止并且不会完成。”

e.g。

Thread myThread = new Thread();
myThread.IsBackground = true;

ThreadPool为后台创建线程。