讓終止線程

來源:互聯網
上載者:User
1、將線程設定為後台執行,在程式退出時,將自動終止線程.
example:Thread.IsBackground = true;

2、在調用線程的外層try..catch結構體中截取System.Threading.ThreadAbortException
try
{
 ..調用帶線程的對象
}
catch( System.Threading.ThreadAbortException exp ){}
catch...

下面是SDK中對於線程中止方法的說明:

線上程上調用此方法時,系統在此線程中引發 ThreadAbortException 以中止它。ThreadAbortException 是一個可以由應用程式代碼捕獲的特殊異常,但除非調用 ResetAbort,否則會在 catch 塊的結尾再次引發它。ResetAbort 取消要中止的請求,並阻止 ThreadAbortException 終止此線程。未執行的 finally 塊將線上程終止前執行。

注意   當線程對自身調用 Abort 時,效果類似於引發異常;ThreadAbortException 會立刻發生,並且結果是可預知的。但是,如果一個線程對另一個線程調用 Abort,則將中斷啟動並執行任何代碼。在 finally 塊運行時線程可能會終止,在這種情況下,finally 塊將被終止。還有一種可能就是靜態建構函式被終止。在極少數情況下,這可以防止在該應用程式定義域中建立該類的執行個體。

線程不一定會立即中止,或者根本不中止。如果線程在作為中止過程的一部分被調用的 finally 塊中做非常大量的計算,從而無限期延遲中止操作,則會發生這種情況。若要確保線程已經中止,請在調用 Abort 之後對線程調用 Join 方法。

如果對尚未啟動的線程調用 Abort,則當調用 Start 時該線程將中止。如果對已掛起的線程調用 Abort,則該線程將繼續然後中止。如果對被阻塞或正在休眠的線程調用 Abort,則該線程被中斷然後中止。如果在執行Unmanaged 程式碼時線程忽略 ThreadAbortException,則當線程開始執行Managed 程式碼時,系統將再次引發 ThreadAbortException

如果同時出現兩次對 Abort 的調用,則可能一個調用設定狀態資訊,而另一個調用執行 Abort。但是,應用程式無法區分這一點。

對線程調用了 Abort 後,線程狀態包括 AbortRequested。成功調用 Abort 而使線程終止後,線程狀態更改為 Stopped。如果有足夠的許可權,作為 Abort 目標的線程就可以使用 ResetAbort 方法取消中止操作。有關說明如何調用 ResetAbort 方法的樣本,請參見 ThreadAbortException 類。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.