2010-09-05 27 views
6

MSDN以及其他许多来源都声称线程池中的工作线程始终处于后台。.NET中的线程池和.IsBackground

“线程池线程是后台线程”。 (MSDN)

“池中的线程总是后台线程。” (线程在C#中,约瑟夫阿尔巴哈利)

我可以很容易地通过设置

Thread.CurrentThread.IsBackground = false; 

和应用程序将等待,直到线程完成让工作线程非背景。

这是什么问题?

回答

5

线程何时完成?当你的方法结束?我非常怀疑这种情况。线程池的全部要点是,一旦线程完成,它将被放回池中以供重用。现在你放开了一个线程,它已经回到了线程池中,并且你的应用程序仍在运行,因为它是一个前台线程。没有办法让这个线程退出来杀死它。

+0

谢谢。我了解通过创建线程非背景导致的问题。我的观点是为什么框架不会禁止以更明显的方式来做到这一点?我希望有一个例外是诚实的。无论如何,谢谢。 – 2010-09-05 17:26:20

10

是的,你可以改变它们。但你不应该

出于同样的原因,你不重画一辆借来的汽车。其他线程属性(如优先级和MTA)也是如此。

如果你想要一种不同的线程,创建你自己的。

3

线程池中的线程是后台线程

完成以这句话“他们有他们的IsBackground属性初始化为true,不像Thread类创建的线程。”

将其设置为false可能有点风险。线程池线程被回收,我不太确定该属性会被重新初始化。它不是与物理操作系统线程关联的属性,它们不具有IsBackground行为,它由CLR提供的包装添加。所以可能是的。没有理由混乱它。