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
类。