后台线程和前台线程有什么区别?
答案 0 :(得分:21)
来自MSDN:
后台线程与之相同 前台线程有一个例外: 后台线程不保留 托管执行环境正在运行。
答案 1 :(得分:18)
请参阅this page:
前台线程能够阻止当前应用程序终止。 CLR不会关闭应用程序(也就是说,卸载托管AppDomain),直到所有前台线程都结束。
CLR将后台线程(有时称为守护程序线程)视为可执行的可执行路径,可以在任何时间点忽略(即使它们当前在某个工作单元上工作)。因此,如果所有前台线程都已终止,则在应用程序域卸载时会自动终止所有后台线程。
答案 2 :(得分:4)
默认情况下,线程是前台线程,这意味着它们可以使应用程序保持活动状态 其中任何一个正在运行。 C#还支持后台线程,后者没有保留 应用程序自行运行 - 一旦所有前台线程结束,立即终止。
答案 3 :(得分:1)
尚未提及的后台线程和前台线程之间的重要区别如下:后台线程仅在执行的前台线程数量小于处理器MSDN的数量时才执行。
答案 4 :(得分:0)
如果任何前台或后台线程终止,则应用程序立即死亡。在应用程序生命周期中的任何时候都可以将线程从前台更改为后台,反之亦然。 CLR创建了两种线程来更好地支持AppDomain。如果前台线程终止,CLR将强制结束正在运行的任何后台线程。由进入托管执行环境的本机代码创建的任何线程都标记为后台线程。
答案 5 :(得分:0)
有两种类型的线程-
背景线程
无论何时打开任何应用程序,主UI线程的类型都是Foreground线程。这是默认的线程类型。假设当我们创建任何新线程时,默认情况下,线程当前类型为前台本身。如果要更改线程的类型,则必须执行threadName.IsBackground = true; 现在主要故事开始了。有什么区别 ?为什么我们需要这两种类型?
前景线程:假设我们正在创建线程 ThreadA 。如果尽管所有其他线程均被中止,即使所有主UI线程不再活动,我们仍需要线程 ThreadA 来继续执行,那么在这种情况下,我们必须保持线程类型为Foreground。因此,如果保留线程的前台类型,那么即使关闭应用程序,前台线程 ThreadA 仍将继续运行,也可以在任务管理器中对其进行跟踪。
后台线程:现在,如果将线程类型更改为后台线程,则该线程将依赖于其他前台线程。因为在这种情况下,如果前台类型的线程都不再运行,则必须强制中止所有后台线程。
答案 6 :(得分:0)
背景线程将被杀死,无论是否还没有完成 前景线程。 >
前景线程的一个示例是应用程序主线程。
背景线程示例为:
System.Threading.Task
类System.Threading.ThreadPool
类有关更多信息,请查看这篇MSDN文章。