2010-09-05 29 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提供的包裝添加。所以可能是的。沒有理由混亂它。