標籤: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#實現終止正在執行的線程