为何Thread.Start创建的线程IsBackground为false?如何创建前台线程?
关于C# Thread线程的前台/后台属性问题
为什么IsBackground默认是false?
- .NET中,使用
Thread类直接创建的线程,默认就是前台线程,所以Thread.CurrentThread.IsBackground的值自然为false。 - 这里需要纠正一个误区:创建线程本身不代表默认是后台状态,前台/后台线程的核心区别在于对进程生命周期的影响:
- 前台线程:只要存在任意一个未结束的前台线程,整个进程就会保持活跃,不会退出。
- 后台线程:当进程的所有前台线程都执行完毕后,不管后台线程是否完成任务,进程都会直接终止,后台线程会被强制停止。
能否通过这种方式创建前台线程?
当然可以,你当前的代码创建的本来就是前台线程。如果需要显式确认(或避免后续代码意外修改),可以手动设置属性(不过默认已是false,这行代码可省略):
var t = new Thread(new ThreadStart(() => { //do something })); t.IsBackground = false; // 显式设置为前台线程 t.Start();
如果需要将线程改为后台状态,只需把IsBackground设为true即可:
t.IsBackground = true;
内容的提问来源于stack exchange,提问作者Joshua Frank
相关产品推荐
相关产品推荐

