Thread.Abort Método

Definição

Levanta a ThreadAbortException no thread onde é invocado, para iniciar o processo de terminação do thread. Chamar este método normalmente termina o thread.

Sobrecargas

Name Description
Abort()
Obsoleto.

Eleva a ThreadAbortException no thread onde é invocado, para iniciar o processo de terminação do thread. Chamar este método normalmente termina o thread.

Abort(Object)
Obsoleto.

Levanta a ThreadAbortException no thread onde é invocado, para iniciar o processo de terminação do thread, fornecendo também informação de exceção sobre a terminação do thread. Chamar este método normalmente termina o thread.

Observações

Importante

Use o Thread.Abort método com cautela. Particularmente quando chamas para abortar um thread diferente do atual, não sabes que código foi executado ou falhou quando é ThreadAbortException lançado. Também não pode ter a certeza do estado da sua aplicação ou de qualquer estado da aplicação e do utilizador que ela 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

Atenção

Thread.Abort is not supported and throws PlatformNotSupportedException.

Eleva a ThreadAbortException no thread onde é invocado, para iniciar o processo de terminação do thread. Chamar este método normalmente termina 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

.NET Core e .NET 5+ apenas: Em todos os casos.

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

O tópico que está a ser abortado está atualmente suspenso.

Observações

Este método está obsoleto. No .NET 5 e versões posteriores, chamar este método produz um aviso em tempo de compilação. Este método lança um PlatformNotSupportedException em tempo de execução em .NET 5 e posteriores e .NET Core.

Quando este método é invocado numa thread, o sistema lança a ThreadAbortException na thread para abortar. ThreadAbortException é uma exceção especial que pode ser detetada pelo código da aplicação, mas é relançada no final do catch bloco, a menos que ResetAbort seja chamada. ResetAbort cancela o pedido de aborto e impede que termine ThreadAbortException a thread. Blocos não executados finally são executados antes de a thread ser abortada.

Note

Quando um thread se liga Abort a si próprio, o efeito é semelhante a lançar uma exceção; isso ThreadAbortException acontece imediatamente, e o resultado é previsível. No entanto, se um thread chamar Abort outro thread, o abort interrompe o código que está a correr. Existe também a possibilidade de um construtor estático poder ser abortado. Em casos raros, isto pode impedir que instâncias dessa classe sejam criadas nesse domínio de aplicação.

O tópico não tem garantia de abortar imediatamente, ou sequer abortar. Esta situação pode ocorrer se um thread fizer uma quantidade ilimitada de cálculo nos finally blocos chamados como parte do procedimento de aborto, atrasando assim indefinidamente o aborto. Para esperar até que um thread aborte, pode chamar o Join método no thread depois de o chamar Abort , mas não há garantia de que a espera termine.

Note

O thread que chama Abort pode bloquear se o thread que está a ser abortado estiver numa região protegida do código, como um catch bloco, finally bloco ou região de execução restrita. Se a thread que chama Abort detiver um bloqueio que a thread abortada exige, pode ocorrer um deadlock.

Se Abort for chamada numa thread que não foi iniciada, a thread aborta quando Start for chamada. Se Abort for chamada num thread que está bloqueado ou em suspensão, o thread é interrompido e depois abortado.

Se Abort for chamado num thread que foi suspenso, a ThreadStateException é lançado no thread que chamou Abort, e AbortRequested é adicionado à ThreadState propriedade do thread que está a ser abortado. A ThreadAbortException não é lançado no fio suspenso até Resume ser chamado.

Se Abort for chamado num thread gerido enquanto está a executar código não gerido, a ThreadAbortException não é lançado até que o thread regresse ao código gerido.

Se duas chamadas Abort ocorrerem ao mesmo tempo, é possível que uma chamada defina a informação de estado e a outra execute o Abort. No entanto, uma aplicação não pode detetar esta situação.

Depois de Abort ser invocado numa thread, o estado da thread inclui AbortRequested. Depois de a thread terminar como resultado de uma chamada bem-sucedida para Abort, o estado da thread é alterado para Stopped. Com permissões suficientes, um thread que seja o alvo de um Abort pode cancelar o abort usando o ResetAbort método. Para um exemplo que demonstra chamar o ResetAbort método, veja a ThreadAbortException classe.

Ver também

Aplica-se a

Abort(Object)

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

Atenção

Thread.Abort is not supported and throws PlatformNotSupportedException.

Levanta a ThreadAbortException no thread onde é invocado, para iniciar o processo de terminação do thread, fornecendo também informação de exceção sobre a terminação do thread. Chamar este método normalmente termina 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 contenha informação específica da aplicação, como o estado, que pode ser usado pelo thread que está a ser abortado.

Atributos

Exceções

.NET Core e .NET 5+ apenas: Em todos os casos.

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

O tópico que está a ser abortado está atualmente suspenso.

Exemplos

O exemplo de código seguinte mostra como passar informação para um thread que está a ser abortado.

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

Observações

Este método está obsoleto. No .NET 5 e versões posteriores, chamar este método produz um aviso em tempo de compilação. Este método lança um PlatformNotSupportedException em tempo de execução em .NET 5 e posteriores e .NET Core.

Quando este método é invocado numa thread, o sistema lança a ThreadAbortException na thread para abortar. ThreadAbortException é uma exceção especial que pode ser detetada pelo código da aplicação, mas é relançada no final do catch bloco, a menos que ResetAbort seja chamada. ResetAbort cancela o pedido de aborto e impede que termine ThreadAbortException a thread. Blocos não executados finally são executados antes de a thread ser abortada.

Note

Quando um thread se liga Abort a si próprio, o efeito é semelhante a lançar uma exceção; isso ThreadAbortException acontece imediatamente, e o resultado é previsível. No entanto, se um thread chamar Abort outro thread, o abort interrompe o código que está a correr. Existe a possibilidade de um construtor estático poder ser abortado. Em casos raros, isto pode impedir que instâncias dessa classe sejam criadas nesse domínio de aplicação.

O tópico não tem garantia de abortar imediatamente, ou sequer abortar. Esta situação pode ocorrer se um thread fizer uma quantidade ilimitada de cálculo nos finally blocos chamados como parte do procedimento de aborto, atrasando assim indefinidamente o aborto. Para esperar até que um thread seja abortado, pode chamar o Join método no thread depois de o chamar Abort , mas não há garantia de que a espera termine.

Note

O thread que chama Abort pode bloquear se o thread que está a ser abortado estiver numa região protegida do código, como um catch bloco, finally bloco ou região de execução restrita. Se a thread que chama Abort detiver um bloqueio que a thread abortada exige, pode ocorrer um deadlock.

Se Abort for chamada numa thread que não foi iniciada, a thread aborta quando Start for chamada. Se Abort for chamada num thread que está bloqueado ou em suspensão, o thread é interrompido e depois abortado.

Se Abort for chamado num thread que foi suspenso, a ThreadStateException é lançado no thread que chamou Abort, e AbortRequested é adicionado à ThreadState propriedade do thread que está a ser abortado. A ThreadAbortException não é lançado no fio suspenso até Resume ser chamado.

Se Abort for chamado num thread gerido enquanto está a executar código não gerido, a ThreadAbortException não é lançado até que o thread regresse ao código gerido.

Se duas chamadas Abort ocorrerem ao mesmo tempo, é possível que uma chamada defina a informação de estado e a outra execute o Abort. No entanto, uma aplicação não pode detetar esta situação.

Depois de Abort ser invocado numa thread, o estado da thread inclui AbortRequested. Depois de a thread terminar como resultado de uma chamada bem-sucedida para Abort, o estado da thread é alterado para Stopped. Com permissões suficientes, um thread que seja o alvo de um Abort pode cancelar o abort usando o ResetAbort método. Para um exemplo que demonstra chamar o ResetAbort método, veja a ThreadAbortException classe.

Ver também

Aplica-se a