Thread.Abort Thread.Abort Thread.Abort Thread.Abort Method

Definición

Produce una excepción ThreadAbortException en el subproceso en el que se invoca, para iniciar el proceso de finalización del subproceso.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Normalmente, una llamada a este método finaliza el subproceso.Calling this method usually terminates the thread.

Sobrecargas

Abort() Abort() Abort() Abort()

Produce una excepción ThreadAbortException en el subproceso en el que se invoca, para iniciar el proceso de finalización del subproceso.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Normalmente, una llamada a este método finaliza el subproceso.Calling this method usually terminates the thread.

Abort(Object) Abort(Object) Abort(Object) Abort(Object)

Produce una excepción ThreadAbortException en el subproceso en el que se invoca, para iniciar el proceso de finalización del subproceso, proporcionando al mismo tiempo información sobre excepciones relativa a la terminación del subproceso.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. Normalmente, una llamada a este método finaliza el subproceso.Calling this method usually terminates the thread.

Comentarios

Importante

El método Thread.Abort debe usarse con precaución.The Thread.Abort method should be used with caution. Especialmente cuando se llama para anular un subproceso distinto del subproceso actual, no se sabe qué código se ha ejecutado o no se ha podido ejecutar cuando se produce el ThreadAbortException, ni se puede estar seguro del estado de la aplicación o de cualquier aplicación y estado de usuario que sea de resp. sible para conservar.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, nor can you be certain of the state of your application or any application and user state that it is responsible for preserving. Por ejemplo, llamar a Thread.Abort puede impedir que los constructores estáticos se ejecuten o impidan la liberación de recursos no administrados.For example, calling Thread.Abort may prevent static constructors from executing or prevent the release of unmanaged resources.

Tenga en cuenta que el método Thread.Abort no se admite en .NET Core.Note that the Thread.Abort method is not supported on .NET Core.

Abort() Abort() Abort() Abort()

Produce una excepción ThreadAbortException en el subproceso en el que se invoca, para iniciar el proceso de finalización del subproceso.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Normalmente, una llamada a este método finaliza el subproceso.Calling this method usually terminates the thread.

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

Excepciones

Solo .NET Core: Este miembro no se admite..NET Core only: This member is not supported.

El llamador no dispone del permiso requerido.The caller does not have the required permission.

Actualmente se suspende el subproceso que se está anulando.The thread that is being aborted is currently suspended.

Comentarios

Cuando se invoca este método en un subproceso, el sistema produce una ThreadAbortException en el subproceso para anularlo.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException es una excepción especial que puede ser detectada por el código de aplicación, pero se vuelve a iniciar al final del bloque catch a menos que se llame a ResetAbort.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 la solicitud de anulación y evita que el ThreadAbortException finalice el subproceso.ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. Los bloques finally no ejecutados se ejecutan antes de que se anule el subproceso.Unexecuted finally blocks are executed before the thread is aborted.

Nota

Cuando un subproceso llama a Abort en sí mismo, el efecto es similar a iniciar una excepción; el ThreadAbortException se produce inmediatamente y el resultado es predecible.When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. Sin embargo, si un subproceso llama a Abort en otro subproceso, la anulación interrumpe cualquier código que se esté ejecutando.However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. También existe la posibilidad de que se pueda anular un constructor estático.There is also a chance that a static constructor could be aborted. En raras ocasiones, esto puede impedir que se creen instancias de esa clase en ese dominio de aplicación.In rare cases, this might prevent instances of that class from being created in that application domain. En las versiones 1,0 y 1,1 de .NET Framework, existe la posibilidad de que el subproceso se anule mientras se ejecuta un bloque finally, en cuyo caso se anula el bloque finally.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.

No se garantiza que el subproceso se anule inmediatamente o en absoluto.The thread is not guaranteed to abort immediately, or at all. Esta situación puede producirse si un subproceso realiza una cantidad ilimitada de cálculos en los bloques finally a los que se llama como parte del procedimiento de anulación, con lo que se retrasa indefinidamente la anulación.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 esperar hasta que se haya anulado un subproceso, puede llamar al método Join en el subproceso después de llamar al método Abort, pero no hay ninguna garantía de que finalice la espera.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.

Nota

El subproceso que llama a Abort podría bloquearse si el subproceso que se está anulando está en una región de código protegida, como un bloque catch, finally o una región de ejecución restringida.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. Si el subproceso que llama a Abort contiene un bloqueo que requiere el subproceso anulado, se puede producir un interbloqueo.If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

Si se llama a Abort en un subproceso que no se ha iniciado, el subproceso se anulará cuando se llame a Start.If Abort is called on a thread that has not been started, the thread will abort when Start is called. Si se llama a Abort en un subproceso que está bloqueado o está en suspensión, el subproceso se interrumpe y se anula.If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

Si se llama a Abort en un subproceso que se ha suspendido, se produce una ThreadStateException en el subproceso que llamó a Abort y se agrega AbortRequested a la propiedad ThreadState del subproceso que se va a anular.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. No se produce una ThreadAbortException en el subproceso suspendido hasta que se llama a Resume.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

Si se llama a Abort en un subproceso administrado mientras se ejecuta código no administrado, no se produce una ThreadAbortException hasta que el subproceso vuelve a código administrado.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.

Si dos llamadas a Abort están al mismo tiempo, es posible que una llamada establezca la información de estado y la otra llamada para ejecutar el 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. Sin embargo, una aplicación no puede detectar esta situación.However, an application cannot detect this situation.

Una vez que se invoca Abort en un subproceso, el estado del subproceso incluye AbortRequested.After Abort is invoked on a thread, the state of the thread includes AbortRequested. Una vez finalizado el subproceso como resultado de una llamada correcta a Abort, el estado del subproceso cambia a Stopped.After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. Con permisos suficientes, un subproceso que es el destino de un Abort puede cancelar la anulación mediante el método ResetAbort.With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. Para obtener un ejemplo que muestra cómo llamar al método ResetAbort, vea la clase ThreadAbortException.For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

Seguridad

SecurityPermission
para operaciones avanzadas en subprocesos.for advanced operations on threads. Enumeración asociada: ControlThread.Associated enumeration: ControlThread.

Consulte también:

Abort(Object) Abort(Object) Abort(Object) Abort(Object)

Produce una excepción ThreadAbortException en el subproceso en el que se invoca, para iniciar el proceso de finalización del subproceso, proporcionando al mismo tiempo información sobre excepciones relativa a la terminación del subproceso.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. Normalmente, una llamada a este método finaliza el subproceso.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 Object Object Object

Objeto que contiene información específica de la aplicación como, por ejemplo, su estado, y que el subproceso anulado puede utilizar.An object that contains application-specific information, such as state, which can be used by the thread being aborted.

Excepciones

Solo .NET Core: Este miembro no se admite..NET Core only: This member is not supported.

El llamador no dispone del permiso requerido.The caller does not have the required permission.

Actualmente se suspende el subproceso que se está anulando.The thread that is being aborted is currently suspended.

Ejemplos

En el ejemplo de código siguiente se muestra cómo pasar información a un subproceso que se va a anular.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

Comentarios

Cuando se invoca este método en un subproceso, el sistema produce una ThreadAbortException en el subproceso para anularlo.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException es una excepción especial que puede ser detectada por el código de aplicación, pero se vuelve a iniciar al final del bloque catch a menos que se llame a ResetAbort.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 la solicitud de anulación y evita que el ThreadAbortException finalice el subproceso.ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. Los bloques finally no ejecutados se ejecutan antes de que se anule el subproceso.Unexecuted finally blocks are executed before the thread is aborted.

Nota

Cuando un subproceso llama a Abort en sí mismo, el efecto es similar a iniciar una excepción; el ThreadAbortException se produce inmediatamente y el resultado es predecible.When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. Sin embargo, si un subproceso llama a Abort en otro subproceso, la anulación interrumpe cualquier código que se esté ejecutando.However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. Existe la posibilidad de que se pueda anular un constructor estático.There is a chance that a static constructor could be aborted. En raras ocasiones, esto puede impedir que se creen instancias de esa clase en ese dominio de aplicación.In rare cases, this might prevent instances of that class from being created in that application domain. En las versiones 1,0 y 1,1 de .NET Framework, existe la posibilidad de que el subproceso se anule mientras se ejecuta un bloque finally, en cuyo caso se anula el bloque finally.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.

No se garantiza que el subproceso se anule inmediatamente o en absoluto.The thread is not guaranteed to abort immediately, or at all. Esta situación puede producirse si un subproceso realiza una cantidad ilimitada de cálculos en los bloques finally a los que se llama como parte del procedimiento de anulación, con lo que se retrasa indefinidamente la anulación.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 esperar hasta que se haya anulado un subproceso, puede llamar al método Join en el subproceso después de llamar al método Abort, pero no hay ninguna garantía de que finalice la espera.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.

Nota

El subproceso que llama a Abort podría bloquearse si el subproceso que se está anulando está en una región de código protegida, como un bloque catch, finally o una región de ejecución restringida.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. Si el subproceso que llama a Abort contiene un bloqueo que requiere el subproceso anulado, se puede producir un interbloqueo.If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

Si se llama a Abort en un subproceso que no se ha iniciado, el subproceso se anulará cuando se llame a Start.If Abort is called on a thread that has not been started, the thread will abort when Start is called. Si se llama a Abort en un subproceso que está bloqueado o está en suspensión, el subproceso se interrumpe y se anula.If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

Si se llama a Abort en un subproceso que se ha suspendido, se produce una ThreadStateException en el subproceso que llamó a Abort y se agrega AbortRequested a la propiedad ThreadState del subproceso que se va a anular.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. No se produce una ThreadAbortException en el subproceso suspendido hasta que se llama a Resume.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

Si se llama a Abort en un subproceso administrado mientras se ejecuta código no administrado, no se produce una ThreadAbortException hasta que el subproceso vuelve a código administrado.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.

Si dos llamadas a Abort están al mismo tiempo, es posible que una llamada establezca la información de estado y la otra llamada para ejecutar el 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. Sin embargo, una aplicación no puede detectar esta situación.However, an application cannot detect this situation.

Una vez que se invoca Abort en un subproceso, el estado del subproceso incluye AbortRequested.After Abort is invoked on a thread, the state of the thread includes AbortRequested. Una vez finalizado el subproceso como resultado de una llamada correcta a Abort, el estado del subproceso cambia a Stopped.After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. Con permisos suficientes, un subproceso que es el destino de un Abort puede cancelar la anulación mediante el método ResetAbort.With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. Para obtener un ejemplo que muestra cómo llamar al método ResetAbort, vea la clase ThreadAbortException.For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

Seguridad

SecurityPermission
para operaciones avanzadas en subprocesos.for advanced operations on threads. Enumeración asociada: ControlThread.Associated enumeration: ControlThread.

Consulte también:

Se aplica a