繁体   English   中英

前台和后台线程的用例

[英]Use case for foreground and background threads

在C#线程中,默认情况下,新线程是前台线程。

但是后台线程的用例是什么?

另外,主线程在前台或后台线程上运行什么->?

根据MSDN ,前台线程和后台线程之间的主要区别是:

后台线程与前台线程相同,但有一个例外:后台线程不能使托管执行环境保持运行状态。 一旦所有前台线程都已在托管进程中停止(.exe文件是托管程序集),系统将停止所有后台线程并关闭。

因此,后台线程的用例是不应阻止进程终止的任务。

如果使用线程监视活动(例如套接字连接),请将其IsBackground属性设置为true,以使该线程不会阻止进程终止。

考虑到两者之间的差异,UI线程应为前台线程,以便在UI关闭之前一直保持进程运行。 如果它是后台线程,则该进程将在没有其他前台线程运行时立即停止运行。

编辑:

因为您可以在进程应该终止时向前台线程发出信号,所以我看不到任何无法仅使用前台线程实现的特殊用例。 由于可能需要通知那些线程释放资源的终止或执行操作,因此,手动发出信号(而不是依靠它们会因为存在背景而终止的事实)是一个更好的选择。 但是,使它们成为背景只是“以防万一”的事情,如果由于某种原因它们没有被发出信号,它们就不会阻止进程终止。

暂无
暂无

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

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