https://blog.csdn.net/snakorse/article/details/43888847
要點:
1、當在主線程中創建了一個線程,那么該線程的IsBackground默認是設置為FALSE的。
2、當主線程退出的時候,IsBackground=FALSE的線程還會繼續執行下去,直到線程執行結束。
3、只有IsBackground=TRUE的線程才會隨着主線程的退出而退出。
4、當初始化一個線程,把Thread.IsBackground=true的時候,指示該線程為后台線程。后台線程將會隨着主線程的退出而退出。
5、原理:只要所有前台線程都終止后,CLR就會對每一個活在的后台線程調用Abort()來徹底終止應用程序。
Net的公用語言運行時(Common Language Runtime,CLR)能區分兩種不同類型的線程:前台線程和后台線程。這兩者的區別就是:應用程序必須運行完所有的前台線程才可以退出;而對於后台線程,應用程序則可以不考慮其是否已經運行完畢而直接退出,所有的后台線程在應用程序退出時都會自動結束。
既然前台線程和后台線程有這種差別,那么我們怎么知道該如何設置一個線程的IsBackground屬性呢?下面是一些基本的原則:對於一些在后台運行的線程,當程序結束時這些線程沒有必要繼續運行了,那么這些線程就應該設置為后台線程。比如一個程序啟動了一個進行大量運算的線程,可是只要程序一旦結束,那個線程就失去了繼續存在的意義,那么那個線程就該是作為后台線程的。而對於一些服務於用戶界面的線程往往是要設置為前台線程的,因為即使程序的主線程結束了,其他的用戶界面的線程很可能要繼續存在來顯示相關的信息,所以不能立即終止它們。這里我只是給出了一些原則,具體到實際的運用往往需要編程者的進一步仔細斟酌。
一般后台線程用於處理時間較短的任務,如在一個Web服務器中可以利用后台線程來處理客戶端發過來的請求信息。而前台線程一般用於處理需要長時間等待的任務,如在Web服務器中的監聽客戶端請求的程序,或是定時對某些系統資源進行掃描的程序。