最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)終止正在執(zhí)行的線程

 更新時(shí)間:2014年09月06日 10:57:54   投稿:shichen2014  
這篇文章主要介紹了C#實(shí)現(xiàn)終止正在執(zhí)行的線程的方法,針對(duì)臨界資源等容易出現(xiàn)錯(cuò)誤的地方進(jìn)行了分析,并提出了改進(jìn)方案與實(shí)例,需要的朋友可以參考下

本文實(shí)例講述了C#實(shí)現(xiàn)終止正在執(zhí)行的線程的實(shí)現(xiàn)方法,并針對(duì)一些容易出錯(cuò)的地方進(jìn)行了深入分析,具體方法如下:

一般來說,很多人都會(huì)使用Abort方法來終止線程,其實(shí)這種做法并不可取!如果你的線程正在操作臨界資源,很有可能會(huì)造成資源沒有正確釋放而出現(xiàn)死鎖問題。正確的做法應(yīng)該是使用標(biāo)記來終止線程的執(zhí)行。

基本思路是:定義一個(gè)用于描述“停止”信號(hào)的變量,在整個(gè)程序啟動(dòng)前,設(shè)置該變量為false。在線程中,循環(huán)判斷該變量是否已經(jīng)被設(shè)置為true,如果沒有,則繼續(xù)執(zhí)行,否則就退出循環(huán)并釋放資源,然后退出執(zhí)行。當(dāng)我們需要線程退出時(shí),只要設(shè)置這個(gè)“停止”信號(hào)為true即可。
 
下面我們來看具體的操作步驟。

首先定義一個(gè)“停止”信號(hào)變量:

private volatile bool canStop = false;

注意這里我們使用了volatile關(guān)鍵字,因?yàn)閏anStop變量將會(huì)被調(diào)用線程和執(zhí)行線程同時(shí)使用,即在調(diào)用線程中初始化以及設(shè)置它的值,而在執(zhí)行線程中判斷它的值。這樣做就告訴編譯器,這個(gè)canStop變量將被多個(gè)線程所使用,強(qiáng)制編譯器不對(duì)其狀態(tài)進(jìn)行優(yōu)化。如果有興趣可以上MSDN查看關(guān)于這個(gè)volatile關(guān)鍵字的更多解釋。此處同時(shí)也給canStop做了初始化。
 
現(xiàn)在我們看看線程的創(chuàng)建與執(zhí)行的代碼:

i = 0;  
// 使用匿名方法定義線程的執(zhí)行體  
Thread thread = new Thread(  
delegate(object param)  
{  
  // 等待“停止”信號(hào),如果沒有收到信號(hào)則執(zhí)行  
  while (!canStop)  
  {  
    i++;  
    UpdateLabel(i);  
  }  
  // 此時(shí)已經(jīng)收到停止信號(hào),可以在此釋放資源并  
  // 初始化變量  
  canStop = false;  
});  
 
thread.Start();

很簡單,在線程的執(zhí)行體中反復(fù)判斷canStop變量是否為true,若是則立刻跳出while循環(huán)(停止變量的自加以及更新界面的操作),然后重新初始化canStop變量為false,以便于下次的使用。
 
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C#?Winform消息通知系統(tǒng)托盤氣泡提示框ToolTip控件

    C#?Winform消息通知系統(tǒng)托盤氣泡提示框ToolTip控件

    這篇文章主要為大家介紹了C#或Winform中的消息通知之系統(tǒng)托盤的氣泡提示框窗口(系統(tǒng)toast通知)、ToolTip控件和ToolTipText屬性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • c#中Empty()和DefalutIfEmpty()用法分析

    c#中Empty()和DefalutIfEmpty()用法分析

    這篇文章主要介紹了c#中Empty()和DefalutIfEmpty()用法,以實(shí)例形式分析了針對(duì)不同情況下Empty()和DefalutIfEmpty()用法區(qū)別,需要的朋友可以參考下
    2014-11-11
  • unity實(shí)現(xiàn)透明水波紋扭曲

    unity實(shí)現(xiàn)透明水波紋扭曲

    這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)透明水波紋扭曲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C#使用表達(dá)式樹(LambdaExpression)動(dòng)態(tài)更新類的屬性值(示例代碼)

    C#使用表達(dá)式樹(LambdaExpression)動(dòng)態(tài)更新類的屬性值(示例代碼)

    這篇文章主要介紹了C#使用表達(dá)式樹(LambdaExpression)動(dòng)態(tài)更新類的屬性值,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • C#數(shù)組的常用操作方法小結(jié)

    C#數(shù)組的常用操作方法小結(jié)

    Array數(shù)組在C#中同樣是最基本的數(shù)據(jù)結(jié)構(gòu),下面為大家C#數(shù)組的常用操作方法小結(jié),皆為細(xì)小的代碼段,歡迎收看收藏
    2016-05-05
  • C#實(shí)現(xiàn)將PDF轉(zhuǎn)為線性化PDF

    C#實(shí)現(xiàn)將PDF轉(zhuǎn)為線性化PDF

    線性化PDF文件是PDF文件的一種特殊格式,可以通過Internet更快地進(jìn)行查看。這篇文章主要介紹了如何通過C#實(shí)現(xiàn)將PDF轉(zhuǎn)為線性化PDF,感興趣的小伙伴可以學(xué)習(xí)一下
    2021-12-12
  • 使用xmltextreader對(duì)象讀取xml文檔示例

    使用xmltextreader對(duì)象讀取xml文檔示例

    這篇文章主要介紹了使用xmltextreader對(duì)象讀取xml文檔的示例,需要的朋友可以參考下
    2014-02-02
  • C#中觀察者模式的3種實(shí)現(xiàn)方式

    C#中觀察者模式的3種實(shí)現(xiàn)方式

    這篇文章主要介紹了C#中觀察者模式的3種實(shí)現(xiàn)方式,本文講解了利用.net的Event模型來實(shí)現(xiàn)、利用.net中IObservable<out T>和IObserver<in T>實(shí)現(xiàn)觀察者模式、Action函數(shù)式方案等3種方法,需要的朋友可以參考下
    2015-03-03
  • C#利用iTextSharp添加PDF水印

    C#利用iTextSharp添加PDF水印

    這篇文章主要為大家詳細(xì)介紹了C#利用iTextSharp添加PDF水印的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 淺析C#更改令牌ChangeToken

    淺析C#更改令牌ChangeToken

    這篇文章主要介紹了C#更改令牌ChangeToken,文中運(yùn)用大量代碼講解的非常詳細(xì),感興趣的小伙伴一起來看看這篇文章吧
    2021-09-09

最新評(píng)論

崇礼县| 伊金霍洛旗| 乐平市| 大安市| 阜新市| 宝应县| 南澳县| 南澳县| 和田县| 独山县| 哈尔滨市| 砀山县| 永靖县| 巴青县| 修武县| 沈阳市| 綦江县| 泰兴市| 北票市| 池州市| 绩溪县| 于都县| 孟连| 海口市| 张北县| 永康市| 保德县| 新竹县| 玛多县| 石林| 托克托县| 黄陵县| 河西区| 南汇区| 辽宁省| 达州市| 泸水县| 荣成市| 方正县| 大名县| 枞阳县|