.net的公用語言執行時(common language runtime,clr)能區分兩種不同型別的執行緒:前台執行緒和後台執行緒。這兩者的區別就是:應用程式必須執行完所有的前台執行緒才可以退出;而對於後台執行緒,應用程式則可以不考慮其是否已經執行完畢而直接退出,所有的後台執行緒在應用程式退出時都會自動結束。
.net環境使用thread建立的執行緒預設情況下是前台執行緒,即執行緒屬性isbackground=false,在程序中,只要有乙個前台執行緒未退出,程序就不會終止。主線程就是乙個前台執行緒。
而後台執行緒不管執行緒是否結束,只要所有的前台執行緒都退出(包括正常退出和異常退出)後,程序就會自動終止。一般後台執行緒用於處理時間較短的任務,如在乙個web伺服器中可以利用後台執行緒來處理客戶端發過來的請求資訊。而前台執行緒一般用於處理需要長時間等待的任務,如在web伺服器中的監聽客戶端請求的程式,或是定時對某些系統資源進行掃瞄的程式。
需要明白的概念性問題:
執行緒是寄託在程序上的,程序都結束了,執行緒也就不復存在了!
只要有乙個前台執行緒未退出,程序就不會終止!即說的就是程式不會關閉!(即在資源管理器中可以看到程序未結束。)
測試**:
public partial class form1 : form
/// /// 彈出窗體form2
///
///
///
private void button1_click(object sender, eventargs e)
}public partial class form2 : form
thread _thread = null;
private void form2_load(object sender, eventargs e)
});_thread.isbackground = false;//false:設定為前台執行緒,系統預設為前台執行緒。
//_thread.isbackground = true;//true:後台執行緒
_thread.start();
}}
測試結果:注意在debug模式下,看看vs是否關閉!!! 或者通過realse模式,**【資源管理器】中的應用程式執行緒是否關閉。
如設為前台執行緒,即isbackground = false,關閉窗體2,在關閉窗體1,雖然窗體1關閉了,然而應用程式還是停留在資源管理器中。
如設為後台執行緒,即isbackground = true, 關閉窗體1後,應用程式立刻從資源管理器中結束。
C 前台執行緒與後台執行緒
由於時間片的原因,雖然所有執行緒在微觀上是序列執行的,但在巨集觀上可以認為是並行執行。執行緒有兩種型別 前台和後台。我們可以通過執行緒屬性isbackground false來指定執行緒的前後臺屬性 預設是前台執行緒 區別是 前台執行緒的程式,必須等所有的前台執行緒執行完畢後才能退出 而後台執行緒的...
c 多執行緒中(前台執行緒與後台執行緒的區別)
c 多執行緒中 前台執行緒與後台執行緒的區別 我不想多說廢話,直接,將 copy到乙個winform程式中去感受一下吧!using system using system.collections.generic using system.componentmodel using system.dat...
c 前台執行緒和後台執行緒
前台執行緒 在主線程執行結束後,若前台執行緒沒有執行完則會阻止主線程的關閉 後台執行緒 在主線程執行結束後,整個執行緒會結束 class threadsample public void countnumbers prints thread.currentthread.name,i static v...