C#實現終止正在執行的線程

來源:互聯網
上載者:User

標籤:sina   padding   float   多個   匿名   sts   otto   關於   分享圖片   

本文執行個體講述了C#實現終止正在執行的線程的實現方法,並針對一些容易出錯的地方進行了深入分析,具體方法如下:

一般來說,很多人都會使用Abort方法來終止線程,其實這種做法並不可取!如果你的線程正在操作臨界資源,很有可能會造成資源沒有正確釋放而出現死結問題。正確的做法應該是使用標記來終止線程的執行。

基本思路是:定義一個用於描述“停止”訊號的變數,在整個程式啟動前,設定該變數為false。線上程中,迴圈判斷該變數是否已經被設定為true,如果沒有,則繼續執行,否則就退出迴圈並釋放資源,然後退出執行。當我們需要線程退出時,只要設定這個“停止”訊號為true即可。

下面我們來看具體的操作步驟。

首先定義一個“停止”訊號變數:

private volatile bool canStop = false;

注意這裡我們使用了volatile關鍵字,因為canStop變數將會被調用線程和執行線程同時使用,即在調用線程中初始化以及設定它的值,而在執行線程中判斷它的值。這樣做就告訴編譯器,這個canStop變數將被多個線程所使用,強制編譯器不對其狀態進行最佳化。如果有興趣可以上MSDN查看關於這個volatile關鍵字的更多解釋。此處同時也給canStop做了初始化。

現在我們看看線程的建立與執行的代碼:

i = 0;// 使用匿名方法定義線程的執行體Thread thread = new Thread(delegate(object param){  // 等待“停止”訊號,如果沒有收到訊號則執行  while (!canStop)  {    i++;    UpdateLabel(i);  }  // 此時已經收到停止訊號,可以在此釋放資源並  // 初始設定變數  canStop = false;});thread.Start();

很簡單,線上程的執行體中反覆判斷canStop變數是否為true,若是則立刻跳出while迴圈(停止變數的自加以及更新介面的操作),然後重新初始化canStop變數為false,以便於下次的使用。

希望本文所述對大家的C#程式設計有所協助。

除聲明外, 跑步客文章均為原創,轉載請以連結形式標明本文地址
  C#實現終止正在執行的線程

本文地址:  http://www.paobuke.com/develop/c-develop/pbk23541.html






相關內容C#編程調用Cards.dll實現圖形化發牌功能樣本C# ListView 點擊表頭對資料進行排序功能的實現代碼C#中系統時間和UNIX時間戳記互相轉換輕鬆學習C#的裝箱與拆箱
C#編程實現取整和取餘的方法.net2.0+ Winform項目實現彈出容器層C#畫筆Pen繪製曲線的方法C#特性 擴充方法

C#實現終止正在執行的線程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.