ThreadAbortException Classe

Definição

A exceção gerada quando é feita uma chamada para o método Abort(Object).The exception that is thrown when a call is made to the Abort(Object) method. Essa classe não pode ser herdada.This class cannot be inherited.

public ref class ThreadAbortException sealed : SystemException
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public sealed class ThreadAbortException : SystemException
type ThreadAbortException = class
    inherit SystemException
Public NotInheritable Class ThreadAbortException
Inherits SystemException
Herança
ThreadAbortException
Atributos

Exemplos

O exemplo a seguir demonstra a anulação de um thread.The following example demonstrates aborting a thread. O thread que recebe o ThreadAbortException usa o ResetAbort método para cancelar a solicitação de anulação e continuar executando.The thread that receives the ThreadAbortException uses the ResetAbort method to cancel the abort request and continue executing.

using namespace System;
using namespace System::Threading;
using namespace System::Security::Permissions;
ref class ThreadWork
{
public:
   static void DoWork()
   {
      try
      {
         for ( int i = 0; i < 100; i++ )
         {
            Console::WriteLine( "Thread - working." );
            Thread::Sleep( 100 );

         }
      }
      catch ( ThreadAbortException^ e ) 
      {
         Console::WriteLine( "Thread - caught ThreadAbortException - resetting." );
         Console::WriteLine( "Exception message: {0}", e->Message );
         Thread::ResetAbort();
      }

      Console::WriteLine( "Thread - still alive and working." );
      Thread::Sleep( 1000 );
      Console::WriteLine( "Thread - finished working." );
   }

};

int main()
{
   ThreadStart^ myThreadDelegate = gcnew ThreadStart( ThreadWork::DoWork );
   Thread^ myThread = gcnew Thread( myThreadDelegate );
   myThread->Start();
   Thread::Sleep( 100 );
   Console::WriteLine( "Main - aborting my thread." );
   myThread->Abort();
   myThread->Join();
   Console::WriteLine( "Main ending." );
}

using System;
using System.Threading;
using System.Security.Permissions;

public class ThreadWork {
    public static void DoWork() {
        try {
            for(int i=0; i<100; i++) {
                Console.WriteLine("Thread - working."); 
                Thread.Sleep(100);
            }
        }
        catch(ThreadAbortException e) {
            Console.WriteLine("Thread - caught ThreadAbortException - resetting.");
            Console.WriteLine("Exception message: {0}", e.Message);
            Thread.ResetAbort();
        }
        Console.WriteLine("Thread - still alive and working."); 
        Thread.Sleep(1000);
        Console.WriteLine("Thread - finished working.");
    }
}

class ThreadAbortTest {
    public static void Main() {
        ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork);
        Thread myThread = new Thread(myThreadDelegate);
        myThread.Start();
        Thread.Sleep(100);
        Console.WriteLine("Main - aborting my thread.");
        myThread.Abort();
        myThread.Join();
        Console.WriteLine("Main ending."); 
    }
}
Imports System.Threading
Imports System.Security.Permissions


Public Class ThreadWork
   Public Shared Sub DoWork()
      Try
         Dim i As Integer
         For i = 0 To 99
            Console.WriteLine("Thread - working.")
            Thread.Sleep(100)
         Next i
      Catch e As ThreadAbortException
         Console.WriteLine("Thread - caught ThreadAbortException - resetting.")
         Console.WriteLine("Exception message: {0}", e.Message)
         Thread.ResetAbort()
      End Try
      Console.WriteLine("Thread - still alive and working.")
      Thread.Sleep(1000)
      Console.WriteLine("Thread - finished working.")
   End Sub
End Class


Class ThreadAbortTest
   Public Shared Sub Main()
      Dim myThreadDelegate As New ThreadStart(AddressOf ThreadWork.DoWork)
      Dim myThread As New Thread(myThreadDelegate)
      myThread.Start()
      Thread.Sleep(100)
      Console.WriteLine("Main - aborting my thread.")
      myThread.Abort()
      myThread.Join()
      Console.WriteLine("Main ending.")
   End Sub
End Class

Esse código gera a seguinte saída:This code produces the following output:

Thread - working.  
Main - aborting my thread.  
Thread - caught ThreadAbortException - resetting.  
Exception message: Thread was being aborted.  
Thread - still alive and working.  
Thread - finished working.  
Main ending.  

Comentários

Quando uma chamada é feita ao Abort método para destruir um thread, o Common Language Runtime gera um. ThreadAbortExceptionWhen a call is made to the Abort method to destroy a thread, the common language runtime throws a ThreadAbortException. ThreadAbortExceptioné uma exceção especial que pode ser detectada, mas será automaticamente gerada novamente no final do catch bloco.ThreadAbortException is a special exception that can be caught, but it will automatically be raised again at the end of the catch block. Quando essa exceção é gerada, o tempo de execução executa todos finally os blocos antes de encerrar o thread.When this exception is raised, the runtime executes all the finally blocks before ending the thread. Como o thread pode fazer uma computação não associada nos finally blocos ou chamar Thread.ResetAbort para cancelar a anulação, não há nenhuma garantia de que o thread será encerrado.Because the thread can do an unbounded computation in the finally blocks or call Thread.ResetAbort to cancel the abort, there is no guarantee that the thread will ever end. Se você quiser aguardar até que o thread abortado seja encerrado, você pode Thread.Join chamar o método.If you want to wait until the aborted thread has ended, you can call the Thread.Join method. Joiné uma chamada de bloqueio que não retorna até que o thread realmente pare de ser executado.Join is a blocking call that does not return until the thread actually stops executing.

Somente .NET Core: Embora esse tipo exista no .NET Core, como Abort não há suporte, o Common Language Runtime nunca será gerado ThreadAbortException..NET Core only: Even though this type exists in .NET Core, since Abort is not supported, the common language runtime won't ever throw ThreadAbortException.

Observação

Quando o Common Language Runtime (CLR) para os threads em segundo plano após a finalização de todos os threads de primeiro Thread.Abortplano em um executável gerenciado, ele não é usado.When the common language runtime (CLR) stops background threads after all foreground threads in a managed executable have ended, it does not use Thread.Abort. Portanto, você não pode ThreadAbortException usar o para detectar quando os threads em segundo plano estão sendo encerrados pelo CLR.Therefore, you cannot use ThreadAbortException to detect when background threads are being terminated by the CLR.

ThreadAbortExceptionusa o HRESULT COR_E_THREADABORTED, que tem o valor 0x80131530.ThreadAbortException uses the HRESULT COR_E_THREADABORTED, which has the value 0x80131530.

Observação

O valor da propriedade herdada Data é sempre. nullThe value of the inherited Data property is always null.

Propriedades

Data

Obtém uma coleção de pares de chave/valor que fornecem informações adicionais definidas pelo usuário sobre a exceção.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Herdado de Exception)
ExceptionState

Obtém um objeto que contém informações específicas ao aplicativo relacionadas à anulação de thread.Gets an object that contains application-specific information related to the thread abort.

HelpLink

Obtém ou define um link para o arquivo de ajuda associado a essa exceção.Gets or sets a link to the help file associated with this exception.

(Herdado de Exception)
HResult

Obtém ou define HRESULT, um valor numérico codificado que é atribuído a uma exceção específica.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Herdado de Exception)
InnerException

Obtém a instância Exception que causou a exceção atual.Gets the Exception instance that caused the current exception.

(Herdado de Exception)
Message

Obtém uma mensagem que descreve a exceção atual.Gets a message that describes the current exception.

(Herdado de Exception)
Source

Obtém ou define o nome do aplicativo ou objeto que causa o erro.Gets or sets the name of the application or the object that causes the error.

(Herdado de Exception)
StackTrace

Obtém uma representação de cadeia de caracteres de quadros imediatos na pilha de chamadas.Gets a string representation of the immediate frames on the call stack.

(Herdado de Exception)
TargetSite

Obtém o método que gerou a exceção atual.Gets the method that throws the current exception.

(Herdado de Exception)

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

(Herdado de Object)
GetBaseException()

Quando substituído em uma classe derivada, retorna a Exception que é a causa raiz de uma ou mais exceções subsequentes.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Herdado de Exception)
GetHashCode()

Serve como a função de hash padrão.Serves as the default hash function.

(Herdado de Object)
GetObjectData(SerializationInfo, StreamingContext)

Quando substituído em uma classe derivada, define o SerializationInfo com informações sobre a exceção.When overridden in a derived class, sets the SerializationInfo with information about the exception.

(Herdado de Exception)
GetType()

Obtém o tipo de tempo de execução da instância atual.Gets the runtime type of the current instance.

(Herdado de Exception)
MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
ToString()

Cria e retorna uma representação de cadeia de caracteres da exceção atual.Creates and returns a string representation of the current exception.

(Herdado de Exception)

Eventos

SerializeObjectState

Ocorre quando uma exceção é serializada para criar um objeto de estado de exceção que contém dados serializados sobre a exceção.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Herdado de Exception)

Aplica-se a

Veja também