Compartilhar via


Thread.Abort Método

Definição

Gera um ThreadAbortException thread no qual ele é invocado, para iniciar o processo de encerramento do thread. Chamar esse método geralmente encerra o thread.

Sobrecargas

Nome Description
Abort()
Obsoleto.

Gera um ThreadAbortException thread no qual ele é invocado, para iniciar o processo de encerramento do thread. Chamar esse método geralmente encerra o thread.

Abort(Object)
Obsoleto.

Gera um ThreadAbortException thread no qual ele é invocado, para iniciar o processo de encerramento do thread, ao mesmo tempo em que fornece informações de exceção sobre o término do thread. Chamar esse método geralmente encerra o thread.

Comentários

Importante

Use o Thread.Abort método com cuidado. Especialmente quando você o chama para anular um thread diferente do thread atual, você não sabe qual código foi executado ou falhou ao executar quando ele ThreadAbortException é lançado. Você também não pode ter certeza do estado do seu aplicativo ou de qualquer outro aplicativo e do estado do usuário que ele seja responsável por preservar. Por exemplo, a chamada Thread.Abort pode impedir a execução de construtores estáticos ou a liberação de recursos gerenciados ou não gerenciados.

Abort()

Origem:
Thread.cs
Origem:
Thread.cs
Origem:
Thread.cs
Origem:
Thread.cs
Origem:
Thread.cs

Cuidado

Thread.Abort is not supported and throws PlatformNotSupportedException.

Gera um ThreadAbortException thread no qual ele é invocado, para iniciar o processo de encerramento do thread. Chamar esse método geralmente encerra o thread.

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

Exceções

Somente .NET Core e .NET 5+: em todos os casos.

O chamador não tem a permissão necessária.

O thread que está sendo anulado está suspenso no momento.

Comentários

Esse método é obsoleto. No .NET 5 e versões posteriores, chamar esse método produz um aviso de tempo de compilação. Esse método lança um PlatformNotSupportedException tempo de execução no .NET 5 e posterior e no .NET Core.

Quando esse método é invocado em um thread, o sistema lança um ThreadAbortException no thread para anula-lo. ThreadAbortException é uma exceção especial que pode ser capturada pelo código do aplicativo, mas é relançada no final do catch bloco, a menos que ResetAbort seja chamada. ResetAbort cancela a solicitação para anular e impede que o ThreadAbortException thread seja encerrado. Blocos não cortados finally são executados antes que o thread seja anulado.

Observação

Quando um thread chama Abort por si mesmo, o efeito é semelhante ao lançamento de uma exceção; o ThreadAbortException acontece imediatamente e o resultado é previsível. No entanto, se um thread chamar Abort em outro thread, a anulação interromperá qualquer código em execução. Há também uma chance de que um construtor estático possa ser anulado. Em casos raros, isso pode impedir que instâncias dessa classe sejam criadas nesse domínio de aplicativo.

O thread não tem garantia de anular imediatamente ou em tudo. Essa situação pode ocorrer se um thread fizer uma quantidade não limitada de computação nos finally blocos que são chamados como parte do procedimento de anulação, atrasando indefinidamente a anulação. Para aguardar até que um thread seja anulado, você pode chamar o Join método no thread depois de chamar o Abort método, mas não há garantia de que a espera terminará.

Observação

O thread que chama Abort poderá ser bloqueado se o thread que está sendo anulado estiver em uma região protegida do código, como um bloco, finally um bloco ou uma catch região de execução restrita. Se o thread que chama Abort contém um bloqueio que o thread anulado requer, um deadlock pode ocorrer.

Se Abort for chamado em um thread que não foi iniciado, o thread será anulado quando Start for chamado. Se Abort for chamado em um thread bloqueado ou em suspensão, o thread será interrompido e, em seguida, anulado.

Se Abort for chamado em um thread que foi suspenso, um ThreadStateException será lançado no thread chamado Aborte AbortRequested será adicionado à ThreadState propriedade do thread que está sendo anulado. Um ThreadAbortException não é lançado no thread suspenso até Resume ser chamado.

Se Abort for chamado em um thread gerenciado enquanto ele estiver executando código não gerenciado, um ThreadAbortException não será gerado até que o thread retorne ao código gerenciado.

Se duas chamadas Abort vierem ao mesmo tempo, é possível que uma chamada defina as informações de estado e a outra chamada para executar o Abort. No entanto, um aplicativo não pode detectar essa situação.

Depois Abort de ser invocado em um thread, o estado do thread inclui AbortRequested. Depois que o thread for encerrado como resultado de uma chamada bem-sucedida, Aborto estado do thread será alterado para Stopped. Com permissões suficientes, um thread que é o destino de um Abort pode cancelar a anulação usando o ResetAbort método. Para obter um exemplo que demonstra a chamada do ResetAbort método, consulte a ThreadAbortException classe.

Confira também

Aplica-se a

Abort(Object)

Origem:
Thread.cs
Origem:
Thread.cs
Origem:
Thread.cs
Origem:
Thread.cs
Origem:
Thread.cs

Cuidado

Thread.Abort is not supported and throws PlatformNotSupportedException.

Gera um ThreadAbortException thread no qual ele é invocado, para iniciar o processo de encerramento do thread, ao mesmo tempo em que fornece informações de exceção sobre o término do thread. Chamar esse método geralmente encerra o thread.

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)

Parâmetros

stateInfo
Object

Um objeto que contém informações específicas do aplicativo, como o estado, que pode ser usado pelo thread que está sendo anulado.

Atributos

Exceções

Somente .NET Core e .NET 5+: em todos os casos.

O chamador não tem a permissão necessária.

O thread que está sendo anulado está suspenso no momento.

Exemplos

O exemplo de código a seguir mostra como passar informações para um thread que está sendo anulado.

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

Comentários

Esse método é obsoleto. No .NET 5 e versões posteriores, chamar esse método produz um aviso de tempo de compilação. Esse método lança um PlatformNotSupportedException tempo de execução no .NET 5 e posterior e no .NET Core.

Quando esse método é invocado em um thread, o sistema lança um ThreadAbortException no thread para anula-lo. ThreadAbortException é uma exceção especial que pode ser capturada pelo código do aplicativo, mas é relançada no final do catch bloco, a menos que ResetAbort seja chamada. ResetAbort cancela a solicitação para anular e impede que o ThreadAbortException thread seja encerrado. Blocos não cortados finally são executados antes que o thread seja anulado.

Observação

Quando um thread chama Abort por si mesmo, o efeito é semelhante ao lançamento de uma exceção; o ThreadAbortException acontece imediatamente e o resultado é previsível. No entanto, se um thread chamar Abort em outro thread, a anulação interromperá qualquer código em execução. Há uma chance de um construtor estático ser anulado. Em casos raros, isso pode impedir que instâncias dessa classe sejam criadas nesse domínio de aplicativo.

O thread não tem garantia de anular imediatamente ou em tudo. Essa situação pode ocorrer se um thread fizer uma quantidade não limitada de computação nos finally blocos que são chamados como parte do procedimento de anulação, atrasando indefinidamente a anulação. Para aguardar até que um thread seja anulado, você pode chamar o Join método no thread depois de chamar o Abort método, mas não há garantia de que a espera terminará.

Observação

O thread que chama Abort poderá ser bloqueado se o thread que está sendo anulado estiver em uma região protegida do código, como um bloco, finally um bloco ou uma catch região de execução restrita. Se o thread que chama Abort contém um bloqueio que o thread anulado requer, um deadlock pode ocorrer.

Se Abort for chamado em um thread que não foi iniciado, o thread será anulado quando Start for chamado. Se Abort for chamado em um thread bloqueado ou em suspensão, o thread será interrompido e, em seguida, anulado.

Se Abort for chamado em um thread que foi suspenso, um ThreadStateException será lançado no thread chamado Aborte AbortRequested será adicionado à ThreadState propriedade do thread que está sendo anulado. Um ThreadAbortException não é lançado no thread suspenso até Resume ser chamado.

Se Abort for chamado em um thread gerenciado enquanto ele estiver executando código não gerenciado, um ThreadAbortException não será gerado até que o thread retorne ao código gerenciado.

Se duas chamadas Abort vierem ao mesmo tempo, é possível que uma chamada defina as informações de estado e a outra chamada para executar o Abort. No entanto, um aplicativo não pode detectar essa situação.

Depois Abort de ser invocado em um thread, o estado do thread inclui AbortRequested. Depois que o thread for encerrado como resultado de uma chamada bem-sucedida, Aborto estado do thread será alterado para Stopped. Com permissões suficientes, um thread que é o destino de um Abort pode cancelar a anulação usando o ResetAbort método. Para obter um exemplo que demonstra a chamada do ResetAbort método, consulte a ThreadAbortException classe.

Confira também

Aplica-se a