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 ()
ObsoleteAttribute

此方法已过时。 在 .NET 5 及更高版本上,调用此方法会生成编译时警告。 此方法在 .NET 5 及更高版本和 .NET Core 的运行时引发 PlatformNotSupportedException

在线程上调用此方法时,系统会在线程中引发 ThreadAbortException 以中止它。 ThreadAbortException 是一个特殊异常,应用程序代码可以捕获,但在块末尾 catch 重新引发,除非 ResetAbort 调用 。 ResetAbort 取消中止请求,并阻止 ThreadAbortException 终止线程。 未执行的 finally 块在线程中止之前执行。

当线程调用 Abort 自身时,效果类似于引发异常; ThreadAbortException 立即发生,结果可预测。 但是,如果一个线程在另一个线程上调用 Abort ,则中止会中断正在运行的任何代码。 静态构造函数也有可能中止。 在极少数情况下,这可能会阻止在该应用程序域中创建该类的实例。

不保证线程立即中止或完全中止。 如果线程在作为中止过程的一部分调用的 finally 块中执行无限量的计算,从而无限期地延迟中止,则可能会出现这种情况。 若要等待线程中止,可以在调用 Join 方法后在线程上调用 Abort 方法,但不能保证等待将结束。

如果被中止的线程位于代码的受保护区域(如 catch 块、 finally 块或受约束的执行区域),则调用 Abort 的线程可能会受阻。 如果调用 Abort 的线程持有中止的线程所需的锁,则可能发生死锁。

如果在 Abort 尚未启动的线程上调用 ,则调用 时 Start 线程将中止。 如果在 Abort 被阻止或处于睡眠状态的线程上调用 ,该线程将中断,然后中止。

如果在 Abort 已挂起的线程上调用 , ThreadStateException 则会在调用 Abort 的线程中引发 ,并将其 AbortRequested 添加到 ThreadState 被中止的线程的 属性中。 在 ThreadAbortException 调用 之前 Resume ,不会在挂起的线程中引发 。

如果在 Abort 托管线程执行非托管代码时在托管线程上调用 , ThreadAbortException 则在线程返回到托管代码之前不会引发 。

如果同时发出对 的两个调用 Abort ,则一个调用可以设置状态信息,另一个调用可以执行 Abort 。 但是,应用程序无法检测到这种情况。

在线程上调用 后 Abort ,线程的状态将包括 AbortRequested 。 成功调用 Abort 后,线程终止后,线程的状态将更改为 Stopped 。 拥有足够的权限后,作为 目标的 Abort 线程可以使用 方法取消中止 ResetAbort 。 有关演示如何调用 ResetAbort 方法的示例,请参阅 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)
catch ( ThreadAbortException^ abortException ) Console::WriteLine( dynamic_cast<String^>(abortException->ExceptionState) ); int main() Thread^ newThread = gcnew Thread( gcnew ThreadStart( &Test::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." ); 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() while(true) Console.WriteLine("New thread running."); Thread.Sleep(1000); catch(ThreadAbortException abortException) Console.WriteLine((string)abortException.ExceptionState); 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() 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 的运行时引发 PlatformNotSupportedException

在线程上调用此方法时,系统会在线程中引发 ThreadAbortException 以中止它。 ThreadAbortException 是一个特殊异常,应用程序代码可以捕获,但在块末尾 catch 重新引发,除非 ResetAbort 调用 。 ResetAbort 取消中止请求,并阻止 ThreadAbortException 终止线程。 未执行的 finally 块在线程中止之前执行。

当线程调用 Abort 自身时,效果类似于引发异常; ThreadAbortException 立即发生,结果可预测。 但是,如果一个线程在另一个线程上调用 Abort ,则中止会中断正在运行的任何代码。 静态构造函数有可能中止。 在极少数情况下,这可能会阻止在该应用程序域中创建该类的实例。

不保证线程立即中止或完全中止。 如果线程在作为中止过程的一部分调用的 finally 块中执行无限量的计算,从而无限期地延迟中止,则可能会出现这种情况。 若要等待线程中止,可以在调用 Join 方法后在线程上调用 Abort 方法,但不能保证等待将结束。

如果被中止的线程位于代码的受保护区域(如 catch 块、 finally 块或受约束的执行区域),则调用 Abort 的线程可能会受阻。 如果调用 Abort 的线程持有中止的线程所需的锁,则可能发生死锁。

如果在 Abort 尚未启动的线程上调用 ,则调用 时 Start 线程将中止。 如果在 Abort 被阻止或处于睡眠状态的线程上调用 ,该线程将中断,然后中止。

如果在 Abort 已挂起的线程上调用 , ThreadStateException 则会在调用 Abort 的线程中引发 ,并将其 AbortRequested 添加到 ThreadState 被中止的线程的 属性中。 在 ThreadAbortException 调用 之前 Resume ,不会在挂起的线程中引发 。

如果在 Abort 托管线程执行非托管代码时在托管线程上调用 , ThreadAbortException 则在线程返回到托管代码之前不会引发 。

如果同时发出对 的两个调用 Abort ,则一个调用可以设置状态信息,另一个调用可以执行 Abort 。 但是,应用程序无法检测到这种情况。

在线程上调用 后 Abort ,线程的状态将包括 AbortRequested 。 成功调用 Abort 后,线程终止后,线程的状态将更改为 Stopped 。 拥有足够的权限后,作为 目标的 Abort 线程可以使用 方法取消中止 ResetAbort 。 有关演示如何调用 ResetAbort 方法的示例,请参阅 ThreadAbortException 类。