關於Thread.IsBackground屬性的理解
轉自:http://blog.csdn.net/luckeryin/article/details/5649144
C#中,Thread類有一個IsBackground 的屬性.MSDN上對它的解釋是:獲取或設定一個值,該值指示某個執行緒是否為後臺執行緒。個人感覺這樣的解釋等於沒有解釋.
.Net中的執行緒,可以分為後臺執行緒和前臺執行緒。後臺執行緒與前臺執行緒並沒有本質的區別,它們之間唯一的區別就是:後臺執行緒不會防止應用程式的程式被終止掉。呵呵,這句話讀出來好像並不那麼好懂.其實,說白了就是當前臺執行緒都結束了的時候,整個程式也就結束了,即使還有後臺執行緒正在執行,此時,所有剩餘的後臺執行緒都會被停止且不會完成.但是,只要還有一個前臺執行緒沒有結束,那麼它將阻止程式結束.這就是為什麼有些設計不夠完美的WinForm程式,在某種特定的情況下,即使所有的視窗都關閉了,但是在工作管理員的管理列表裡仍然可以找到該程式的程式,仍然在消耗著CPU和記憶體資源.因此,在WinForm程式中,關閉所有視窗前,應該停止所有前臺執行緒,千萬不要遺忘了某個前臺執行緒.應用程式程式的存亡由前臺執行緒決定而於後臺執行緒無關.這就是它們的區別.
知道了前後臺執行緒的區別,就應該知道如何宣告IsBackgroud屬性的值了.
值得說明的一點是:改變執行緒從前臺到後臺不會以任何方式改變它在CPU協調程式中的優先順序和狀態。因為前臺後執行緒與程式程式的優先順序無關.
結束前摘錄MSDN上一段示例碼,以幫助大家便好的理解這一區別:
下面的程式碼示例對比了前臺執行緒與後臺執行緒的行為。建立一個前臺執行緒和一個後臺執行緒。前臺執行緒使程式保持執行,直到它完成它的 while 迴圈。前臺執行緒完成後,程式在後臺執行緒完成它的 while 迴圈之前終止。
using System; using System.Threading; class Test { static void Main() { BackgroundTest shortTest = new BackgroundTest(10); Thread foregroundThread = new Thread(new ThreadStart(shortTest.RunLoop)); foregroundThread.Name = "ForegroundThread"; BackgroundTest longTest = new BackgroundTest(50); Thread backgroundThread = new Thread(new ThreadStart(longTest.RunLoop)); backgroundThread.Name = "BackgroundThread"; backgroundThread.IsBackground = true; foregroundThread.Start(); backgroundThread.Start(); } } class BackgroundTest { int maxIterations; public BackgroundTest(int maxIterations) { this.maxIterations = maxIterations; } public void RunLoop() { String threadName = Thread.CurrentThread.Name; for(int i = 0; i < maxIterations; i++) { Console.WriteLine("{0} count: {1}", threadName, i.ToString()); Thread.Sleep(250); } Console.WriteLine("{0} finished counting.", threadName); } }
相關文章
- 關於IOS 屬性atomic(原子性)的理解iOS
- 關於CSS中設定overflow屬性的值為hidden的相關理解CSS
- 關於Python類屬性與例項屬性的討論Python
- 理解 JavaScript 物件的屬性JavaScript物件
- 理解JavaScript的原型屬性JavaScript原型
- 關於css屬性calc對於ie的態度CSS
- CSS學習——關於連結的屬性CSS
- [譯] 理解 Cookie 的 SameSite 屬性Cookie
- 如何理解vue的key屬性Vue
- Python 類屬性的理解Python
- 深刻理解php“繼承“、“私有屬性“、“$this指向“的關係PHP繼承
- 關於對健壯性程式碼的理解
- 關於angular的$resource中的isArray屬性問題Angular
- 請問關於Struts的Indexed屬性的問題Index
- 關於非線性和線性是什麼的理解
- laravel Eloquent模型 關於模型關聯屬性獲取Laravel模型
- 4.3.2.3 關於PDB$SEED資料檔案的屬性
- android關於屬性動畫的七個使用案例Android動畫
- .Net(C#)關於變數的命名和屬性C#變數
- 關於.Net中屬性的使用探討(一) (轉)
- 關於.Net中屬性的使用探討(二) (轉)
- 理解 Kotlin 中的屬性(property)Kotlin
- 深入理解CSS的display屬性CSS
- SuperObject Delphi 的 JSON 屬性亂序 – 操作類改造 – 關於屬性順序的問題ObjectJSON
- 深入理解屬性代理
- 深入理解Flex屬性Flex
- 深入理解display屬性
- 關於python類屬性和例項屬性的一些細節注意點Python
- 深入理解物件的資料屬性與訪問器屬性物件
- 關於CSS3的變形、過渡、動畫、關聯屬性CSSS3動畫
- 關於事務的ACID屬性中的“C”與“I”
- 深入理解css中的margin屬性CSS
- 基於autofac的屬性注入
- 如何理解Android屬性動畫Android動畫
- 理解CSS屬性值語法CSS
- 關於 Angular 部署以及 index.html 裡 base hRef 屬性的關聯關係AngularIndexHTML
- CSS display屬性的表格佈局相關屬性的解釋CSS
- background相關屬性