C#中前臺(tái)線程和后臺(tái)線程的區(qū)別與聯(lián)系
前臺(tái)線程和后臺(tái)線程的區(qū)別和聯(lián)系:
1、后臺(tái)線程不會(huì)阻止進(jìn)程的終止。屬于某個(gè)進(jìn)程的所有前臺(tái)線程都終止后,該進(jìn)程就會(huì)被終止。所有剩余的后臺(tái)線程都會(huì)停止且不會(huì)完成。
2、可以在任何時(shí)候?qū)⑶芭_(tái)線程修改為后臺(tái)線程,方式是設(shè)置Thread.IsBackground 屬性。
3、不管是前臺(tái)線程還是后臺(tái)線程,如果線程內(nèi)出現(xiàn)了異常,都會(huì)導(dǎo)致進(jìn)程的終止。
4、托管線程池中的線程都是后臺(tái)線程,使用new Thread方式創(chuàng)建的線程默認(rèn)都是前臺(tái)線程。
下面做個(gè)小例子來(lái)證實(shí)一下,代碼如下很簡(jiǎn)單:
class Program
{
static AutoResetEvent autoEvent =new AutoResetEvent(false);
staticvoid Main()
{
Thread newThread =new Thread(new ThreadStart(ThreadMethod));
//newThread.IsBackground = true;
Console.WriteLine("主線程開(kāi)始執(zhí)行。");
newThread.Start();
Console.WriteLine("主線程結(jié)束");
}
staticvoid ThreadMethod()
{
//掛起子線程
autoEvent.WaitOne();
Console.WriteLine("子線程執(zhí)行");
}
}
我在第9行下了個(gè)斷點(diǎn),來(lái)看一下通過(guò) new Thread方式創(chuàng)建的線程的IsBackground屬性,截圖如下:

可見(jiàn)通過(guò)new Thread方式創(chuàng)建的線程,確實(shí)是默認(rèn)為前臺(tái)線程。
程序運(yùn)行的結(jié)果如下圖:

該控制太程序沒(méi)有像平時(shí)一樣自動(dòng)關(guān)閉,而使一直停在那里。并且我們從圖中可以看到主線程執(zhí)行完了,而子線程(前臺(tái)線程)并沒(méi)有執(zhí)行完(因?yàn)楸籥utoEvent.WaitOne()方法掛起了)。
這就說(shuō)明了前臺(tái)線程是可以阻止進(jìn)程的終止的。
如果將第8行的注釋去掉的話,控制臺(tái)程序?qū)⒆詣?dòng)終止,大家可以試一下。
相關(guān)文章
C#自定義鼠標(biāo)拖拽Drag&Drop效果之基本原理及基本實(shí)現(xiàn)代碼
拖拽效果無(wú)論是在系統(tǒng)上、應(yīng)用上、還是在網(wǎng)頁(yè)上,拖拽隨處可見(jiàn),下面通過(guò)本文介紹下C#自定義鼠標(biāo)拖拽Drag&Drop效果之基本原理及基本實(shí)現(xiàn)代碼,需要的朋友可以參考下2022-04-04
在C#使用字典存儲(chǔ)事件示例及實(shí)現(xiàn)自定義事件訪問(wèn)器
這篇文章主要介紹了在C#使用字典存儲(chǔ)事件示例及實(shí)現(xiàn)自定義事件訪問(wèn)器的方法,是C#事件編程中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-02-02
基于WPF實(shí)現(xiàn)一個(gè)簡(jiǎn)單的音頻播放動(dòng)畫(huà)控件
這篇文章主要介紹了如何利用WPF實(shí)現(xiàn)一個(gè)簡(jiǎn)單的音頻播放動(dòng)畫(huà)控件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下2022-07-07
Jquery+Ajax+Json+存儲(chǔ)過(guò)程實(shí)現(xiàn)高效分頁(yè)
這篇文章主要介紹Jquery+Ajax+Json+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè),需要的朋友可以參考下2015-08-08
C#實(shí)現(xiàn)條形碼識(shí)別的解決方案分享
主流的識(shí)別庫(kù)主要有ZXing.NET和ZBar,OpenCV 4.0后加入了QR碼檢測(cè)和解碼功能,所以本文主要和大家分享了使用ZBar進(jìn)行條形碼識(shí)別的示例代碼,需要的可以參考一下2023-07-07
C#實(shí)現(xiàn)毫秒轉(zhuǎn)換成時(shí)分秒的方法
這篇文章主要介紹了C#實(shí)現(xiàn)毫秒轉(zhuǎn)換成時(shí)分秒的方法,涉及C#時(shí)間的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
C#打包部署并把.net framework框架打到安裝包的方法步驟
打包c(diǎn)#程序時(shí),有時(shí)需要添加.net framework組件到安裝包,本文就來(lái)介紹一下C#打包部署并把.net framework框架打到安裝包的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
C#批量插入數(shù)據(jù)到sqlserver的方法詳解
這篇文章主要為大家詳細(xì)介紹了C#中四種可以批量插入數(shù)據(jù)到sqlserver的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2025-02-02

