前台线程和后台线程的用例

3
在C#多线程中,默认情况下新线程是前台线程。
但是后台线程有什么用途呢?
而主线程在哪个线程上运行 - 是在前台线程还是后台线程上?
1个回答

3
根据MSDN,前台线程和后台线程的主要区别在于:
后台线程与前台线程相同,唯一的区别是:后台线程不会保持托管执行环境运行。在托管进程(其中.exe文件是托管程序集)中停止所有前台线程后,系统将停止所有后台线程并关闭。
因此,后台线程的使用场景是,任务不应阻止进程终止。
如果您使用线程来监视活动(例如套接字连接),请将其IsBackground属性设置为true,以便该线程不会阻止进程终止。
考虑到这种差异,UI线程应该是前台线程,以便它保持进程运行,直到UI关闭。如果它是后台线程,则当没有其他前台线程运行时,进程立即停止运行。
编辑:

既然可以在进程结束时向前台线程发出信号,我认为没有任何特殊用例不能仅使用前台线程实现。由于这些线程可能需要被通知终止以释放资源或执行操作,手动发出信号(而不是依赖它们将被终止,因为它们是后台线程)可能是更好的选择。但将它们设置为后台线程只是一种“以防万一”的措施,如果由于某种原因它们没有被信号通知,它们不会阻止进程终止。


1
有任何特定的使用案例示例吗? - helloworld
正如我在答案中引用的那样,一个使用案例是活动监控。例如,监听一个端口以等待传入连接。 - Mehrzad Chehraz
有没有办法使池化线程成为前台线程,或者它们严格来说总是后台线程?如果可以的话,那么你认为它们的用例是什么?与活动监视、监听端口相同吗? - helloworld
我不明白你的意思。你可以随意处理后台线程池线程,但它们并不能阻止进程终止,仅此而已。 - Mehrzad Chehraz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接