国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

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

2020-01-24 02:26:23
字體:
來源:轉載
供稿:網友

本文實例講述了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#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 抚顺市| 交口县| 界首市| 和平县| 庄浪县| 苏尼特右旗| 邯郸县| 阳谷县| 呼图壁县| 三穗县| 辉南县| 大冶市| 会宁县| 万全县| 康平县| 扬中市| 通许县| 贵溪市| 洛宁县| 荔浦县| 雷州市| 望奎县| 乌恰县| 剑阁县| 芒康县| 舟山市| 察哈| 铜山县| 合阳县| 南宫市| 翁牛特旗| 阳谷县| 岳西县| 建昌县| 葵青区| 武安市| 嘉善县| 西盟| 龙江县| SHOW| 河曲县|