启动时我的应用程序可能同时启动一些线程。现在基于某些条件,我想完全杀死所有线程,无论其他线程的状态如何。
我已尝试App.Current.ShutDown()
以及Application.Current.ShutDown
但不起作用?
答案 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为后台创建线程。