C#完成終止正在履行的線程。本站提示廣大學習愛好者:(C#完成終止正在履行的線程)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成終止正在履行的線程正文
本文實例講述了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#法式設計有所贊助。