Thread.Abort 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
在被呼叫的執行緒中提出 a ThreadAbortException ,開始終止執行緒的程序。 呼叫此方法通常會終止執行緒。
多載
| 名稱 | Description |
|---|---|
| Abort() |
已淘汰.
在被呼叫的執行緒中提出 a ThreadAbortException ,開始終止執行緒的過程。 呼叫此方法通常會終止執行緒。 |
| Abort(Object) |
已淘汰.
在呼叫執行緒中提出 a ThreadAbortException ,開始終止執行緒的過程,同時提供關於執行緒終止的例外資訊。 呼叫此方法通常會終止執行緒。 |
備註
這很重要
使用 Thread.Abort 方法時要小心。 尤其是當你呼叫它來中止除目前執行緒以外的執行緒時,你不知道哪些程式碼已經執行或未執行 ThreadAbortException 。 您也無法確定您的應用程式的狀態,或者它所負責保留的任何應用程式和使用者狀態。 例如,呼叫 Thread.Abort 可能會防止執行靜態建構函式或釋放受管理或非受管理資源。
Abort()
- 來源:
- Thread.cs
- 來源:
- Thread.cs
- 來源:
- Thread.cs
- 來源:
- Thread.cs
- 來源:
- Thread.cs
警告
Thread.Abort is not supported and throws PlatformNotSupportedException.
在被呼叫的執行緒中提出 a ThreadAbortException ,開始終止執行緒的過程。 呼叫此方法通常會終止執行緒。
public:
void Abort();
[System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public void Abort();
public void Abort();
[<System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
member this.Abort : unit -> unit
member this.Abort : unit -> unit
Public Sub Abort ()
- 屬性
例外狀況
僅限 .NET Core 和 .NET 5+:適用於所有情況。
來電者沒有所需的權限。
被中止的執行緒目前是暫停狀態。
備註
這個方法已過時。 在 .NET 5 及更新版本中,呼叫此方法會產生編譯時警告。 此方法在 .NET 5 及更新版本及 .NET Core 執行時丟出 a PlatformNotSupportedException 。
當執行緒被呼叫此方法時,系統會丟 ThreadAbortException 入執行緒以中止執行緒。
ThreadAbortException 是一個特殊例外,可被應用程式碼捕捉,但在區塊結束 catch 時會重新拋出,除非 ResetAbort 被呼叫。
ResetAbort 取消中止請求,並阻止終止 ThreadAbortException 執行緒。 未執行 finally 的區塊會在執行緒中止前被執行。
備註
當執行緒 Abort 呼叫自身時,效果類似拋出例外;異常 ThreadAbortException 立即發生,且結果可預測。 然而,如果一個執行緒 Abort 呼叫另一個執行緒,中止會中斷正在執行的程式碼。 也有可能中止靜態建構器。 在極少數情況下,這可能會阻止該類別的實例在該應用域中被建立。
該討論串不保證會立即或完全中止。 這種情況可能發生在執行緒對中止程序所呼叫的區塊中進行無限量的計算 finally ,從而無限期延遲中止。 若要等待執行緒中止,你可以在呼叫Abort該方法後呼叫Join該執行緒的方法,但無法保證等待會結束。
備註
呼叫執行緒 Abort 可能會阻塞,若中止執行緒位於受保護的程式碼區域,如 catch 區塊、 finally 區塊或受限執行區域。 如果呼叫 Abort 執行緒持有該中止執行緒所需的鎖,可能會發生死結。
如果 Abort 在尚未啟動的執行緒上呼叫,執行緒會在被呼叫時 Start 中止。 如果 Abort 呼叫的執行緒被阻塞或處於休眠狀態,執行緒會被中斷並中止。
若 Abort 在被暫停的執行緒上被呼叫,則會拋出 a ThreadStateException 到呼叫 Abort的執行緒中,並 AbortRequested 加入 ThreadState 被中止執行緒的屬性中。
ThreadAbortException A 在被呼叫之前Resume不會丟入暫停執行緒。
如果 Abort 在執行非管理程式碼時,在受管理執行緒中呼叫 a ThreadAbortException ,則在執行緒返回受管理程式碼之前,a不會被拋出。
若同時有兩個呼叫 Abort ,一個呼叫可設定狀態資訊,另一個呼叫執行 Abort。 然而,應用程式無法偵測此情況。
在執行緒中被呼叫後 Abort ,執行緒的狀態包含 AbortRequested。 當執行緒因成功呼叫 而 Abort終止後,執行緒的狀態會改為 Stopped。 在取得足夠權限的情況下,作為 目標 Abort 的執行緒可以使用該 ResetAbort 方法取消中止。 若要示範呼叫該方法的ResetAbort範例,請參見類別。ThreadAbortException
另請參閱
適用於
Abort(Object)
- 來源:
- Thread.cs
- 來源:
- Thread.cs
- 來源:
- Thread.cs
- 來源:
- Thread.cs
- 來源:
- Thread.cs
警告
Thread.Abort is not supported and throws PlatformNotSupportedException.
在呼叫執行緒中提出 a ThreadAbortException ,開始終止執行緒的過程,同時提供關於執行緒終止的例外資訊。 呼叫此方法通常會終止執行緒。
public:
void Abort(System::Object ^ stateInfo);
[System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public void Abort(object? stateInfo);
public void Abort(object stateInfo);
public void Abort(object? stateInfo);
[<System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
member this.Abort : obj -> unit
member this.Abort : obj -> unit
Public Sub Abort (stateInfo As Object)
參數
- stateInfo
- Object
一個包含應用程式特定資訊的物件,例如狀態,這些資訊可被中止執行緒使用。
- 屬性
例外狀況
僅限 .NET Core 和 .NET 5+:適用於所有情況。
來電者沒有所需的權限。
被中止的執行緒目前是暫停狀態。
範例
以下程式碼範例說明如何將資訊傳遞給正在中止的執行緒。
using System;
using System.Threading;
class Test
{
public static void Main()
{
Thread newThread = new Thread(new ThreadStart(TestMethod));
newThread.Start();
Thread.Sleep(1000);
// Abort newThread.
Console.WriteLine("Main aborting new thread.");
newThread.Abort("Information from Main.");
// Wait for the thread to terminate.
newThread.Join();
Console.WriteLine("New thread terminated - Main exiting.");
}
static void TestMethod()
{
try
{
while(true)
{
Console.WriteLine("New thread running.");
Thread.Sleep(1000);
}
}
catch(ThreadAbortException abortException)
{
Console.WriteLine((string)abortException.ExceptionState);
}
}
}
open System.Threading
let testMethod () =
try
while true do
printfn "New thread running."
Thread.Sleep 1000
with :? ThreadAbortException as abortException ->
printfn $"{abortException.ExceptionState :?> string}"
let newThread = Thread testMethod
newThread.Start()
Thread.Sleep 1000
// Abort newThread.
printfn "Main aborting new thread."
newThread.Abort "Information from Main."
// Wait for the thread to terminate.
newThread.Join()
printfn "New thread terminated - Main exiting."
Imports System.Threading
Public Class Test
<MTAThread> _
Shared Sub Main()
Dim newThread As New Thread(AddressOf TestMethod)
newThread.Start()
Thread.Sleep(1000)
' Abort newThread.
Console.WriteLine("Main aborting new thread.")
newThread.Abort("Information from Main.")
' Wait for the thread to terminate.
newThread.Join()
Console.WriteLine("New thread terminated - Main exiting.")
End Sub
Shared Sub TestMethod()
Try
While True
Console.WriteLine("New thread running.")
Thread.Sleep(1000)
End While
Catch abortException As ThreadAbortException
Console.WriteLine( _
CType(abortException.ExceptionState, String))
End Try
End Sub
End Class
備註
這個方法已過時。 在 .NET 5 及更新版本中,呼叫此方法會產生編譯時警告。 此方法在 .NET 5 及更新版本及 .NET Core 執行時丟出 a PlatformNotSupportedException 。
當執行緒被呼叫此方法時,系統會丟 ThreadAbortException 入執行緒以中止執行緒。
ThreadAbortException 是一個特殊例外,可被應用程式碼捕捉,但在區塊結束 catch 時會重新拋出,除非 ResetAbort 被呼叫。
ResetAbort 取消中止請求,並阻止終止 ThreadAbortException 執行緒。 未執行 finally 的區塊會在執行緒中止前被執行。
備註
當執行緒 Abort 呼叫自身時,效果類似拋出例外;異常 ThreadAbortException 立即發生,且結果可預測。 然而,如果一個執行緒 Abort 呼叫另一個執行緒,中止會中斷正在執行的程式碼。 靜態建構器有可能被中止。 在極少數情況下,這可能會阻止該類別的實例在該應用域中被建立。
該討論串不保證會立即或完全中止。 這種情況可能發生在執行緒對中止程序所呼叫的區塊中進行無限量的計算 finally ,從而無限期延遲中止。 若要等待執行緒中止,你可以在呼叫Abort方法後呼叫該執行緒的方法Join,但無法保證等待會結束。
備註
呼叫執行緒 Abort 可能會阻塞,若中止執行緒位於受保護的程式碼區域,如 catch 區塊、 finally 區塊或受限執行區域。 如果呼叫 Abort 執行緒持有該中止執行緒所需的鎖,可能會發生死結。
如果 Abort 在尚未啟動的執行緒上呼叫,執行緒會在被呼叫時 Start 中止。 如果 Abort 呼叫的執行緒被阻塞或處於休眠狀態,執行緒會被中斷並中止。
若 Abort 在被暫停的執行緒上被呼叫,則會拋出 a ThreadStateException 到呼叫 Abort的執行緒中,並 AbortRequested 加入 ThreadState 被中止執行緒的屬性中。
ThreadAbortException A 在被呼叫之前Resume不會丟入暫停執行緒。
如果 Abort 在執行非管理程式碼時,在受管理執行緒中呼叫 a ThreadAbortException ,則在執行緒返回受管理程式碼之前,a不會被拋出。
若同時有兩個呼叫 Abort ,一個呼叫可設定狀態資訊,另一個呼叫執行 Abort。 然而,應用程式無法偵測此情況。
在執行緒中被呼叫後 Abort ,執行緒的狀態包含 AbortRequested。 當執行緒因成功呼叫 而 Abort終止後,執行緒的狀態會改為 Stopped。 在取得足夠權限的情況下,作為 目標 Abort 的執行緒可以使用該 ResetAbort 方法取消中止。 若要示範呼叫該方法的ResetAbort範例,請參見類別。ThreadAbortException