Thread.Abort 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在调用线程的线程中引发一个 ThreadAbortException ,以开始终止线程的过程。 调用此方法通常会终止线程。
重载
| 名称 | 说明 |
|---|---|
| Abort() |
已过时.
在调用线程的线程中引发一个 ThreadAbortException ,以开始终止线程的过程。 调用此方法通常会终止线程。 |
| Abort(Object) |
已过时.
在调用线程的线程中引发一个 ThreadAbortException ,以开始终止线程的过程,同时提供有关线程终止的异常信息。 调用此方法通常会终止线程。 |
注解
重要
Thread.Abort请谨慎使用该方法。 特别是当你调用它以中止当前线程以外的线程时,你不知道在引发代码时 ThreadAbortException 执行了哪些代码或未能执行。 你也不能确定应用程序的状态,也不能确定它负责保留的任何应用程序和用户状态。 例如,调用 Thread.Abort 可能会阻止执行静态构造函数或释放托管或非托管资源。
Abort()
- Source:
- Thread.cs
- Source:
- Thread.cs
- Source:
- Thread.cs
- Source:
- Thread.cs
- Source:
- Thread.cs
注意
Thread.Abort is not supported and throws PlatformNotSupportedException.
在调用线程的线程中引发一个 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 上的运行时引发 PlatformNotSupportedException 。
在线程上调用此方法时,系统会在线程中引发中止 ThreadAbortException 该方法。
ThreadAbortException 是应用程序代码可以捕获的特殊异常,但在块末尾 catch 重新引发,除非 ResetAbort 被调用。
ResetAbort 取消中止请求,并阻止 ThreadAbortException 终止线程。 在中止线程之前执行未执行的 finally 块。
注释
当线程本身调用 Abort 时,效果类似于引发异常; ThreadAbortException 立即发生,结果可预测。 但是,如果一个线程在另一个线程上调用 Abort ,中止会中断正在运行的任何代码。 还可以中止静态构造函数。 在极少数情况下,这可能会阻止在该应用程序域中创建该类的实例。
不保证线程立即中止或完全中止。 如果线程在作为中止过程的一部分调用的块中 finally 执行无限的计算量,从而无限期地延迟中止,则可能会出现这种情况。 若要等待线程中止,可以在调用该方法后在线程上调用JoinAbort该方法,但不能保证等待将结束。
如果在 Abort 尚未启动的线程上调用,则调用该线程时 Start 将中止。 如果在 Abort 被阻止或正在休眠的线程上调用,则线程将被中断,然后中止。
如果在Abort已挂起的线程上调用,则会在调用Abort的线程中引发一个ThreadStateException,并将其AbortRequested添加到ThreadState正在中止的线程的属性中。 在调用之前Resume,不会在挂起的线程中引发 AThreadAbortException。
如果在 Abort 托管线程执行非托管代码时在托管线程上调用, ThreadAbortException 则在线程返回到托管代码之前不会引发 a。
如果同时发出两个调用 Abort ,则一个调用可以设置状态信息,另一个调用可以执行该 Abort调用。 但是,应用程序无法检测到这种情况。
在线程上调用后 Abort ,线程的状态包括 AbortRequested。 由于成功调用 Abort线程而终止线程后,线程的状态将更改为 Stopped。 具有足够的权限,作为目标 Abort 线程可以使用该方法取消中止 ResetAbort 。 有关演示如何调用 ResetAbort 该方法的示例,请参阅类 ThreadAbortException 。
另请参阅
适用于
Abort(Object)
- Source:
- Thread.cs
- Source:
- Thread.cs
- Source:
- Thread.cs
- Source:
- Thread.cs
- Source:
- Thread.cs
注意
Thread.Abort is not supported and throws PlatformNotSupportedException.
在调用线程的线程中引发一个 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 上的运行时引发 PlatformNotSupportedException 。
在线程上调用此方法时,系统会在线程中引发中止 ThreadAbortException 该方法。
ThreadAbortException 是应用程序代码可以捕获的特殊异常,但在块末尾 catch 重新引发,除非 ResetAbort 被调用。
ResetAbort 取消中止请求,并阻止 ThreadAbortException 终止线程。 在中止线程之前执行未执行的 finally 块。
注释
当线程本身调用 Abort 时,效果类似于引发异常; ThreadAbortException 立即发生,结果可预测。 但是,如果一个线程在另一个线程上调用 Abort ,中止会中断正在运行的任何代码。 有可能中止静态构造函数。 在极少数情况下,这可能会阻止在该应用程序域中创建该类的实例。
不保证线程立即中止或完全中止。 如果线程在作为中止过程的一部分调用的块中 finally 执行无限的计算量,从而无限期地延迟中止,则可能会出现这种情况。 若要等待线程中止,可以在调用Abort该方法后在线程上调用Join该方法,但不能保证等待将结束。
如果在 Abort 尚未启动的线程上调用,则调用该线程时 Start 将中止。 如果在 Abort 被阻止或正在休眠的线程上调用,则线程将被中断,然后中止。
如果在Abort已挂起的线程上调用,则会在调用Abort的线程中引发一个ThreadStateException,并将其AbortRequested添加到ThreadState正在中止的线程的属性中。 在调用之前Resume,不会在挂起的线程中引发 AThreadAbortException。
如果在 Abort 托管线程执行非托管代码时在托管线程上调用, ThreadAbortException 则在线程返回到托管代码之前不会引发 a。
如果同时发出两个调用 Abort ,则一个调用可以设置状态信息,另一个调用可以执行该 Abort调用。 但是,应用程序无法检测到这种情况。
在线程上调用后 Abort ,线程的状态包括 AbortRequested。 由于成功调用 Abort线程而终止线程后,线程的状态将更改为 Stopped。 具有足够的权限,作为目标 Abort 线程可以使用该方法取消中止 ResetAbort 。 有关演示如何调用 ResetAbort 该方法的示例,请参阅类 ThreadAbortException 。