Thread.Abort Méthode

Définition

Déclenche ThreadAbortException dans le thread sur lequel l'appel a lieu pour commencer le processus d'arrêt du thread.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. L'appel de cette méthode arrête généralement le thread.Calling this method usually terminates the thread.

Surcharges

Abort()

Déclenche ThreadAbortException dans le thread sur lequel l'appel a lieu pour commencer le processus d'arrêt du thread.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. L'appel de cette méthode arrête généralement le thread.Calling this method usually terminates the thread.

Abort(Object)

Déclenche une ThreadAbortException dans le thread sur lequel l'appel a lieu pour commencer le processus d'arrêt du thread, tout en fournissant des informations sur les exceptions relatives à l'arrêt du 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. L'appel de cette méthode arrête généralement le thread.Calling this method usually terminates the thread.

Remarques

Important

La méthode Thread.Abort doit être utilisée avec précaution.The Thread.Abort method should be used with caution. En particulier, lorsque vous l’appelez pour abandonner un thread autre que le thread actuel, vous ne savez pas quel code a été exécuté ou n’a pas pu s’exécuter lorsque la ThreadAbortException est levée, et vous ne pouvez pas être certain de l’état de votre application ou de l’état de l’application ou de l’utilisateur respon sible à conserver.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. Par exemple, l’appel de Thread.Abort peut empêcher des constructeurs statiques de s’exécuter ou d’empêcher la libération de ressources non managées.For example, calling Thread.Abort may prevent static constructors from executing or prevent the release of unmanaged resources.

Notez que la méthode Thread.Abort n’est pas prise en charge sur .NET Core.Note that the Thread.Abort method is not supported on .NET Core.

Abort()

Déclenche ThreadAbortException dans le thread sur lequel l'appel a lieu pour commencer le processus d'arrêt du thread.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. L'appel de cette méthode arrête généralement le thread.Calling this method usually terminates the thread.

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

Exceptions

.NET Core uniquement : ce membre n’est pas pris en charge..NET Core only: This member is not supported.

L'appelant n'a pas l'autorisation requise.The caller does not have the required permission.

Le thread en cours d’abandon est actuellement suspendu.The thread that is being aborted is currently suspended.

Remarques

Lorsque cette méthode est appelée sur un thread, le système lève une ThreadAbortException dans le thread pour l’abandonner.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException est une exception spéciale qui peut être interceptée par le code de l’application, mais qui est levée à nouveau à la fin du bloc catch, sauf si ResetAbort est appelé.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 annule la demande d’abandon et empêche le ThreadAbortException de terminer le thread.ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. Les blocs finally non exécutés sont exécutés avant l’abandon du thread.Unexecuted finally blocks are executed before the thread is aborted.

Notes

Quand un thread appelle Abort sur lui-même, l’effet est semblable à la levée d’une exception. le ThreadAbortException se produit immédiatement et le résultat est prévisible.When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. Toutefois, si un thread appelle Abort sur un autre thread, l’abandon interrompt tout code en cours d’exécution.However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. Il y a également un risque qu’un constructeur statique soit abandonné.There is also a chance that a static constructor could be aborted. Dans de rares cas, cela peut empêcher la création d’instances de cette classe dans ce domaine d’application.In rare cases, this might prevent instances of that class from being created in that application domain. Dans les versions 1,0 et 1,1 de .NET Framework, il est possible que le thread s’arrête alors qu’un bloc finally est en cours d’exécution, auquel cas le bloc finally est abandonné.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.

Il n’est pas garanti que le thread s’interrompt immédiatement, ou du tout.The thread is not guaranteed to abort immediately, or at all. Cette situation peut se produire si un thread effectue une quantité illimitée de calculs dans les blocs finally qui sont appelés dans le cadre de la procédure d’abandon, ce qui retarde indéfiniment l’abandon.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. Pour attendre qu’un thread soit abandonné, vous pouvez appeler la méthode Join sur le thread après avoir appelé la méthode Abort, mais il n’y a aucune garantie que l’attente se terminera.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.

Notes

Le thread qui appelle Abort peut se bloquer si le thread en cours d’abandon se trouve dans une région de code protégée, telle qu’un bloc catch, finally ou une région d’exécution restreinte.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 le thread qui appelle Abort maintient un verrou requis par le thread abandonné, un interblocage peut se produire.If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

Si Abort est appelé sur un thread qui n’a pas été démarré, le thread est abandonné lorsque Start est appelé.If Abort is called on a thread that has not been started, the thread will abort when Start is called. Si Abort est appelé sur un thread qui est bloqué ou en veille, le thread est interrompu, puis abandonné.If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

Si Abort est appelé sur un thread qui a été suspendu, une ThreadStateException est levée dans le thread qui a appelé Abort, et AbortRequested est ajouté à la propriété ThreadState du thread en cours d’abandon.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. Un ThreadAbortException n’est pas levé dans le thread suspendu tant que Resume n’est pas appelé.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

Si Abort est appelé sur un thread managé pendant qu’il exécute du code non managé, une ThreadAbortException n’est pas levée tant que le thread n’est pas retourné au code managé.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 deux appels à Abort se présentent en même temps, il est possible pour un appel de définir les informations d’État et l’autre appel d’exécuter le 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. Toutefois, une application ne peut pas détecter cette situation.However, an application cannot detect this situation.

Une fois Abort est appelé sur un thread, l’état du thread comprend AbortRequested.After Abort is invoked on a thread, the state of the thread includes AbortRequested. Une fois que le thread s’est arrêté suite à un appel réussi à Abort, l’état du thread est changé en Stopped.After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. Avec des autorisations suffisantes, un thread qui est la cible d’un Abort peut annuler l’abandon à l’aide de la méthode ResetAbort.With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. Pour obtenir un exemple qui illustre l’appel de la méthode ResetAbort, consultez la classe ThreadAbortException.For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

Sécurité

SecurityPermission
pour les opérations avancées sur les threads.for advanced operations on threads. Énumération associée : ControlThread.Associated enumeration: ControlThread.

Voir aussi

Abort(Object)

Déclenche une ThreadAbortException dans le thread sur lequel l'appel a lieu pour commencer le processus d'arrêt du thread, tout en fournissant des informations sur les exceptions relatives à l'arrêt du 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. L'appel de cette méthode arrête généralement le 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)

Paramètres

stateInfo
Object

Objet contenant des informations spécifiques à l'application, telles que l'état, qui peuvent être utilisées par le thread en cours d'abandon.An object that contains application-specific information, such as state, which can be used by the thread being aborted.

Exceptions

.NET Core uniquement : ce membre n’est pas pris en charge..NET Core only: This member is not supported.

L'appelant n'a pas l'autorisation requise.The caller does not have the required permission.

Le thread en cours d’abandon est actuellement suspendu.The thread that is being aborted is currently suspended.

Exemples

L’exemple de code suivant montre comment passer des informations à un thread en cours d’abandon.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

Remarques

Lorsque cette méthode est appelée sur un thread, le système lève une ThreadAbortException dans le thread pour l’abandonner.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException est une exception spéciale qui peut être interceptée par le code de l’application, mais qui est levée à nouveau à la fin du bloc catch, sauf si ResetAbort est appelé.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 annule la demande d’abandon et empêche le ThreadAbortException de terminer le thread.ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. Les blocs finally non exécutés sont exécutés avant l’abandon du thread.Unexecuted finally blocks are executed before the thread is aborted.

Notes

Quand un thread appelle Abort sur lui-même, l’effet est semblable à la levée d’une exception. le ThreadAbortException se produit immédiatement et le résultat est prévisible.When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. Toutefois, si un thread appelle Abort sur un autre thread, l’abandon interrompt tout code en cours d’exécution.However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. Il y a un risque qu’un constructeur statique soit abandonné.There is a chance that a static constructor could be aborted. Dans de rares cas, cela peut empêcher la création d’instances de cette classe dans ce domaine d’application.In rare cases, this might prevent instances of that class from being created in that application domain. Dans les versions 1,0 et 1,1 de .NET Framework, il est possible que le thread s’arrête alors qu’un bloc finally est en cours d’exécution, auquel cas le bloc finally est abandonné.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.

Il n’est pas garanti que le thread s’interrompt immédiatement, ou du tout.The thread is not guaranteed to abort immediately, or at all. Cette situation peut se produire si un thread effectue une quantité illimitée de calculs dans les blocs finally qui sont appelés dans le cadre de la procédure d’abandon, ce qui retarde indéfiniment l’abandon.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. Pour attendre la fin d’un thread, vous pouvez appeler la méthode Join sur le thread après avoir appelé la méthode Abort, mais il n’existe aucune garantie que l’attente se termine.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.

Notes

Le thread qui appelle Abort peut se bloquer si le thread en cours d’abandon se trouve dans une région de code protégée, telle qu’un bloc catch, finally ou une région d’exécution restreinte.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 le thread qui appelle Abort maintient un verrou requis par le thread abandonné, un interblocage peut se produire.If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

Si Abort est appelé sur un thread qui n’a pas été démarré, le thread est abandonné lorsque Start est appelé.If Abort is called on a thread that has not been started, the thread will abort when Start is called. Si Abort est appelé sur un thread qui est bloqué ou en veille, le thread est interrompu, puis abandonné.If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

Si Abort est appelé sur un thread qui a été suspendu, une ThreadStateException est levée dans le thread qui a appelé Abort, et AbortRequested est ajouté à la propriété ThreadState du thread en cours d’abandon.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. Un ThreadAbortException n’est pas levé dans le thread suspendu tant que Resume n’est pas appelé.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

Si Abort est appelé sur un thread managé pendant qu’il exécute du code non managé, une ThreadAbortException n’est pas levée tant que le thread n’est pas retourné au code managé.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 deux appels à Abort se présentent en même temps, il est possible pour un appel de définir les informations d’État et l’autre appel d’exécuter le 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. Toutefois, une application ne peut pas détecter cette situation.However, an application cannot detect this situation.

Une fois Abort est appelé sur un thread, l’état du thread comprend AbortRequested.After Abort is invoked on a thread, the state of the thread includes AbortRequested. Une fois que le thread s’est arrêté suite à un appel réussi à Abort, l’état du thread est changé en Stopped.After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. Avec des autorisations suffisantes, un thread qui est la cible d’un Abort peut annuler l’abandon à l’aide de la méthode ResetAbort.With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. Pour obtenir un exemple qui illustre l’appel de la méthode ResetAbort, consultez la classe ThreadAbortException.For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

Sécurité

SecurityPermission
pour les opérations avancées sur les threads.for advanced operations on threads. Énumération associée : ControlThread.Associated enumeration: ControlThread.

Voir aussi

S’applique à