Thread.Abort Método

Definição

Gera um ThreadAbortException no thread no qual ele é invocado, para iniciar o processo de encerramento do thread.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Geralmente, a chamada a esse método termina o thread.Calling this method usually terminates the thread.

Sobrecargas

Abort()

Gera um ThreadAbortException no thread no qual ele é invocado, para iniciar o processo de encerramento do thread.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Geralmente, a chamada a esse método termina o thread.Calling this method usually terminates the thread.

Abort(Object)

Gera um ThreadAbortException no thread no qual ele é invocado, para iniciar o processo de término do thread e ao mesmo tempo fornecer informações de exceção sobre o término do thread.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread while also providing exception information about the thread termination. Geralmente, a chamada a esse método termina o thread.Calling this method usually terminates the thread.

Comentários

Importante

O Thread.Abort método deve ser usado com cautela.The Thread.Abort method should be used with caution. Especialmente ao chamá-lo para anular um thread diferente do thread atual, você não sabe qual código foi executado ou falhou ao ser executado quando o ThreadAbortException é lançado.Particularly when you call it to abort a thread other than the current thread, you do not know what code has executed or failed to execute when the ThreadAbortException is thrown. Você também não pode ter certeza do estado do seu aplicativo ou de qualquer aplicativo e estado do usuário que seja responsável por preservar.You also cannot be certain of the state of your application or any application and user state that it's responsible for preserving. Por exemplo, a chamada Thread.Abort pode impedir a execução de construtores estáticos ou o lançamento de recursos não gerenciados.For example, calling Thread.Abort may prevent the execution of static constructors or the release of unmanaged resources.

Abort()

Gera um ThreadAbortException no thread no qual ele é invocado, para iniciar o processo de encerramento do thread.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Geralmente, a chamada a esse método termina o thread.Calling this method usually terminates the thread.

public:
 void Abort();
public void Abort ();
member this.Abort : unit -> unit
Public Sub Abort ()

Exceções

.NET 5.0 e versões posteriores e .NET Core: em todos os casos..NET 5.0 and later and .NET Core: In all cases.

O chamador não tem a permissão necessária.The caller does not have the required permission.

O thread que está sendo anulado está suspenso no momento.The thread that is being aborted is currently suspended.

Comentários

Esse método é obsoleto.This method is obsolete. No .NET 5,0 e versões posteriores, chamar esse método produz um aviso de tempo de compilação.On .NET 5.0 and later versions, calling this method produces a compile-time warning. Esse método gera um PlatformNotSupportedException em tempo de execução no .net 5,0 e posterior e no .NET Core.This method throws a PlatformNotSupportedException at run time on .NET 5.0 and later and .NET Core.

Quando esse método é invocado em um thread, o sistema gera um ThreadAbortException no thread para abortar.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException é uma exceção especial que pode ser detectada pelo código do aplicativo, mas é relançada no final do catch bloco, a menos que ResetAbort seja chamado.ThreadAbortException is a special exception that can be caught by application code, but is re-thrown at the end of the catch block unless ResetAbort is called. ResetAbort Cancela a solicitação para abortar e impede que o ThreadAbortException encerre o thread.ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. finallyBlocos não executados são executados antes de o thread ser anulado.Unexecuted finally blocks are executed before the thread is aborted.

Observação

Quando um thread chama Abort a si mesmo, o efeito é semelhante a gerar uma exceção; o ThreadAbortException acontece imediatamente e o resultado é previsível.When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. No entanto, se um thread chamar Abort outro thread, a anulação interromperá qualquer código em execução.However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. Também há uma chance de que um construtor estático possa ser anulado.There is also a chance that a static constructor could be aborted. Em casos raros, isso pode impedir que instâncias dessa classe sejam criadas nesse domínio de aplicativo.In rare cases, this might prevent instances of that class from being created in that application domain. No .NET Framework versões 1,0 e 1,1, há uma chance de o thread ser anulado enquanto um finally bloco está em execução, caso em que o finally bloco é anulado.In the .NET Framework versions 1.0 and 1.1, there is a chance the thread could abort while a finally block is running, in which case the finally block is aborted.

Não há garantia de que o thread seja anulado imediatamente ou de nenhuma.The thread is not guaranteed to abort immediately, or at all. Essa situação pode ocorrer se um thread fizer uma quantidade não associada de computação nos finally blocos que são chamados como parte do procedimento de anulação, indefinidamente atrasando a anulação.This situation can occur if a thread does an unbounded amount of computation in the finally blocks that are called as part of the abort procedure, thereby indefinitely delaying the abort. 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á nenhuma garantia de que a espera será encerrada.To wait until a thread has aborted, you can call the Join method on the thread after calling the Abort method, but there is no guarantee the wait will end.

Observação

O thread que chama Abort pode bloquear se o thread que está sendo anulado estiver em uma região protegida de código, como um catch bloco, finally bloco ou uma região de execução restrita.The thread that calls Abort might block if the thread that is being aborted is in a protected region of code, such as a catch block, finally block, or constrained execution region. Se o thread que chama Abort mantém um bloqueio que o thread anulado requer, pode ocorrer um deadlock.If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

Se Abort for chamado em um thread que não foi iniciado, o thread será anulado quando Start for chamado.If Abort is called on a thread that has not been started, the thread will abort when Start is called. Se Abort for chamado em um thread bloqueado ou estiver em suspensão, o thread será interrompido e anulado.If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

Se Abort for chamado em um thread que foi suspenso, um ThreadStateException será lançado no thread que chamou Abort e AbortRequested será adicionado à ThreadState Propriedade do thread que está sendo anulado.If Abort is called on a thread that has been suspended, a ThreadStateException is thrown in the thread that called Abort, and AbortRequested is added to the ThreadState property of the thread being aborted. Um ThreadAbortException não é lançado no thread suspenso até que Resume seja chamado.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

Se Abort for chamado em um thread gerenciado enquanto está executando código não gerenciado, um ThreadAbortException não será lançado até que o thread retorne para o código gerenciado.If Abort is called on a managed thread while it is executing unmanaged code, a ThreadAbortException is not thrown until the thread returns to managed code.

Se duas chamadas Abort chegarem ao mesmo tempo, é possível que uma chamada defina as informações de estado e a outra chamada para executar o Abort .If two calls to Abort come at the same time, it is possible for one call to set the state information and the other call to execute the Abort. No entanto, um aplicativo não pode detectar essa situação.However, an application cannot detect this situation.

Depois Abort que é invocado em um thread, o estado do thread inclui AbortRequested .After Abort is invoked on a thread, the state of the thread includes AbortRequested. Depois que o thread for encerrado como resultado de uma chamada bem-sucedida para Abort , o estado do thread será alterado para Stopped .After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. Com permissões suficientes, um thread que é o destino de um Abort pode cancelar a anulação usando o ResetAbort método.With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. Para obter um exemplo que demonstra a chamada do ResetAbort método, consulte a ThreadAbortException classe.For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

Confira também

Aplica-se a

Abort(Object)

Gera um ThreadAbortException no thread no qual ele é invocado, para iniciar o processo de término do thread e ao mesmo tempo fornecer informações de exceção sobre o término do thread.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread while also providing exception information about the thread termination. Geralmente, a chamada a esse método termina o thread.Calling this method usually terminates the thread.

public:
 void Abort(System::Object ^ stateInfo);
public void Abort (object stateInfo);
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 estado, que podem ser usadas pelo thread que está sendo anulado.An object that contains application-specific information, such as state, which can be used by the thread being aborted.

Exceções

.NET 5.0 e versões posteriores e .NET Core: em todos os casos..NET 5.0 and later and .NET Core: In all cases.

O chamador não tem a permissão necessária.The caller does not have the required permission.

O thread que está sendo anulado está suspenso no momento.The thread that is being aborted is currently suspended.

Exemplos

O exemplo de código a seguir mostra como passar informações para um thread que está sendo anulado.The following code example shows how to pass information to a thread that is being aborted.

using namespace System;
using namespace System::Threading;
ref class Test
{
private:
   Test(){}


public:
   static void TestMethod()
   {
      try
      {
         while ( true )
         {
            Console::WriteLine( "New thread running." );
            Thread::Sleep( 1000 );
         }
      }
      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()
    {
        try
        {
            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()
        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.This method is obsolete. No .NET 5,0 e versões posteriores, chamar esse método produz um aviso de tempo de compilação.On .NET 5.0 and later versions, calling this method produces a compile-time warning. Esse método gera um PlatformNotSupportedException em tempo de execução no .net 5,0 e posterior e no .NET Core.This method throws a PlatformNotSupportedException at run time on .NET 5.0 and later and .NET Core.

Quando esse método é invocado em um thread, o sistema gera um ThreadAbortException no thread para abortar.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException é uma exceção especial que pode ser detectada pelo código do aplicativo, mas é relançada no final do catch bloco, a menos que ResetAbort seja chamado.ThreadAbortException is a special exception that can be caught by application code, but is re-thrown at the end of the catch block unless ResetAbort is called. ResetAbort Cancela a solicitação para abortar e impede que o ThreadAbortException encerre o thread.ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. finallyBlocos não executados são executados antes de o thread ser anulado.Unexecuted finally blocks are executed before the thread is aborted.

Observação

Quando um thread chama Abort a si mesmo, o efeito é semelhante a gerar uma exceção; o ThreadAbortException acontece imediatamente e o resultado é previsível.When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. No entanto, se um thread chamar Abort outro thread, a anulação interromperá qualquer código em execução.However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. Há uma chance de que um construtor estático possa ser anulado.There is a chance that a static constructor could be aborted. Em casos raros, isso pode impedir que instâncias dessa classe sejam criadas nesse domínio de aplicativo.In rare cases, this might prevent instances of that class from being created in that application domain. No .NET Framework versões 1,0 e 1,1, há uma chance de o thread ser anulado enquanto um finally bloco está em execução, caso em que o finally bloco é anulado.In the .NET Framework versions 1.0 and 1.1, there is a chance the thread could abort while a finally block is running, in which case the finally block is aborted.

Não há garantia de que o thread seja anulado imediatamente ou de nenhuma.The thread is not guaranteed to abort immediately, or at all. Essa situação pode ocorrer se um thread fizer uma quantidade não associada de computação nos finally blocos que são chamados como parte do procedimento de anulação, indefinidamente atrasando a anulação.This situation can occur if a thread does an unbounded amount of computation in the finally blocks that are called as part of the abort procedure, thereby indefinitely delaying the abort. 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á nenhuma garantia de que a espera será encerrada.To wait until a thread has aborted, you can call the Join method on the thread after calling the Abort method, but there is no guarantee that the wait will end.

Observação

O thread que chama Abort pode bloquear se o thread que está sendo anulado estiver em uma região protegida de código, como um catch bloco, finally bloco ou uma região de execução restrita.The thread that calls Abort might block if the thread that is being aborted is in a protected region of code, such as a catch block, finally block, or constrained execution region. Se o thread que chama Abort mantém um bloqueio que o thread anulado requer, pode ocorrer um deadlock.If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

Se Abort for chamado em um thread que não foi iniciado, o thread será anulado quando Start for chamado.If Abort is called on a thread that has not been started, the thread will abort when Start is called. Se Abort for chamado em um thread bloqueado ou estiver em suspensão, o thread será interrompido e anulado.If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

Se Abort for chamado em um thread que foi suspenso, um ThreadStateException será lançado no thread que chamou Abort e AbortRequested será adicionado à ThreadState Propriedade do thread que está sendo anulado.If Abort is called on a thread that has been suspended, a ThreadStateException is thrown in the thread that called Abort, and AbortRequested is added to the ThreadState property of the thread being aborted. Um ThreadAbortException não é lançado no thread suspenso até que Resume seja chamado.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

Se Abort for chamado em um thread gerenciado enquanto está executando código não gerenciado, um ThreadAbortException não será lançado até que o thread retorne para o código gerenciado.If Abort is called on a managed thread while it is executing unmanaged code, a ThreadAbortException is not thrown until the thread returns to managed code.

Se duas chamadas Abort chegarem ao mesmo tempo, é possível que uma chamada defina as informações de estado e a outra chamada para executar o Abort .If two calls to Abort come at the same time, it is possible for one call to set the state information and the other call to execute the Abort. No entanto, um aplicativo não pode detectar essa situação.However, an application cannot detect this situation.

Depois Abort que é invocado em um thread, o estado do thread inclui AbortRequested .After Abort is invoked on a thread, the state of the thread includes AbortRequested. Depois que o thread for encerrado como resultado de uma chamada bem-sucedida para Abort , o estado do thread será alterado para Stopped .After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. Com permissões suficientes, um thread que é o destino de um Abort pode cancelar a anulação usando o ResetAbort método.With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. Para obter um exemplo que demonstra a chamada do ResetAbort método, consulte a ThreadAbortException classe.For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

Confira também

Aplica-se a