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. L'appel de cette méthode arrête généralement le thread.

Surcharges

Abort()
Obsolète.

Déclenche ThreadAbortException dans le thread sur lequel l'appel a lieu pour commencer le processus d'arrêt du thread. L'appel de cette méthode arrête généralement le thread.

Abort(Object)
Obsolète.

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. L'appel de cette méthode arrête généralement le thread.

Remarques

Important

La Thread.Abort méthode doit être utilisée avec pré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 le ThreadAbortException est levé. Vous ne pouvez pas non plus être certain de l’état de votre application ou de l’état de l’application et de l’utilisateur qu’elle est responsable de la préservation. Par exemple, l’appel de Thread.Abort peut empêcher l’exécution de constructeurs statiques ou la libération de ressources non managées.

Abort()

Attention

Thread.Abort is not supported and throws PlatformNotSupportedException.

Déclenche ThreadAbortException dans le thread sur lequel l'appel a lieu pour commencer le processus d'arrêt du thread. L'appel de cette méthode arrête généralement le 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 ()
Attributs

Exceptions

.NET Core et .NET 5 (et versions ultérieures) uniquement : Dans tous les cas.

L'appelant n'a pas l'autorisation requise.

Le thread en cours d’abandon est actuellement suspendu.

Remarques

Cette méthode est obsolète. Sur .NET 5 et versions ultérieures, l’appel de cette méthode produit un avertissement au moment de la compilation. Cette méthode lève une exception PlatformNotSupportedException au moment de l’exécution sur .net 5 et versions ultérieures et .net core.

Quand cette méthode est appelée sur un thread, le système lève une exception ThreadAbortException dans le thread pour l’abandonner. 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 catch bloc, sauf si ResetAbort est appelé. ResetAbort annule la demande d’abandon et empêche le ThreadAbortException d’arrêter le thread. finallyLes blocs non exécutés sont exécutés avant l’abandon du thread.

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. Toutefois, si un thread appelle Abort sur un autre thread, l’abandon interrompt tout code en cours d’exécution. Il y a également un risque qu’un constructeur statique soit abandonné. Dans de rares cas, cela peut empêcher la création d’instances de cette classe dans ce domaine d’application. dans les versions 1,0 et 1,1 de .NET Framework, il est possible que le thread abandonne pendant l’exécution d’un finally bloc, auquel cas le finally bloc est abandonné.

Il n’est pas garanti que le thread s’interrompt immédiatement, ou du tout. Cette situation peut se produire si un thread effectue une quantité illimitée de calculs dans les finally blocs appelés dans le cadre de la procédure d’annulation, ce qui retarde indéfiniment l’abandon. Pour attendre qu’un thread soit abandonné, vous pouvez appeler la Join méthode sur le thread après avoir appelé la Abort méthode, mais il n’y a aucune garantie que l’attente se terminera.

Notes

Le thread qui appelle Abort peut se bloquer si le thread qui est abandonné se trouve dans une région de code protégée, telle qu’un catch bloc, un finally bloc ou une région d’exécution restreinte. Si le thread qui appelle Abort maintient un verrou requis par le thread abandonné, un interblocage peut se produire.

Si Abort est appelé sur un thread qui n’a pas été démarré, le thread s’arrête quand Start est appelé. Si Abort est appelé sur un thread bloqué ou en veille, le thread est interrompu puis abandonné.

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 ThreadState propriété du thread en cours d’abandon. Un ThreadAbortException n’est pas levé dans le thread suspendu tant que Resume n’est pas appelé.

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é.

Si deux appels à Abort sont effectués 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 . Toutefois, une application ne peut pas détecter cette situation.

Une fois que Abort est appelé sur un thread, l’état du thread comprend AbortRequested . Une fois que le thread s’est arrêté suite à un appel réussi à Abort , l’état du thread devient Stopped . Avec des autorisations suffisantes, un thread qui est la cible d’un Abort peut annuler l’abandon à l’aide de la ResetAbort méthode. Pour obtenir un exemple qui illustre l’appel de la ResetAbort méthode, consultez la ThreadAbortException classe.

Voir aussi

S’applique à

Abort(Object)

Attention

Thread.Abort is not supported and throws PlatformNotSupportedException.

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. L'appel de cette méthode arrête généralement le 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)

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.

Attributs

Exceptions

.NET Core et .NET 5 (et versions ultérieures) uniquement : Dans tous les cas.

L'appelant n'a pas l'autorisation requise.

Le thread en cours d’abandon est actuellement suspendu.

Exemples

L’exemple de code suivant montre comment passer des informations à un thread en cours d’abandon.

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

Cette méthode est obsolète. Sur .NET 5 et versions ultérieures, l’appel de cette méthode produit un avertissement au moment de la compilation. Cette méthode lève une exception PlatformNotSupportedException au moment de l’exécution sur .net 5 et versions ultérieures et .net core.

Quand cette méthode est appelée sur un thread, le système lève une exception ThreadAbortException dans le thread pour l’abandonner. 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 catch bloc, sauf si ResetAbort est appelé. ResetAbort annule la demande d’abandon et empêche le ThreadAbortException d’arrêter le thread. finallyLes blocs non exécutés sont exécutés avant l’abandon du thread.

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. Toutefois, si un thread appelle Abort sur un autre thread, l’abandon interrompt tout code en cours d’exécution. Il y a un risque qu’un constructeur statique soit abandonné. Dans de rares cas, cela peut empêcher la création d’instances de cette classe dans ce domaine d’application. dans les versions 1,0 et 1,1 de .NET Framework, il est possible que le thread abandonne pendant l’exécution d’un finally bloc, auquel cas le finally bloc est abandonné.

Il n’est pas garanti que le thread s’interrompt immédiatement, ou du tout. Cette situation peut se produire si un thread effectue une quantité illimitée de calculs dans les finally blocs appelés dans le cadre de la procédure d’annulation, ce qui retarde indéfiniment l’abandon. Pour attendre la fin d’un thread, vous pouvez appeler la Join méthode sur le thread après avoir appelé la Abort méthode, mais il n’existe aucune garantie que l’attente se termine.

Notes

Le thread qui appelle Abort peut se bloquer si le thread qui est abandonné se trouve dans une région de code protégée, telle qu’un catch bloc, un finally bloc ou une région d’exécution restreinte. Si le thread qui appelle Abort maintient un verrou requis par le thread abandonné, un interblocage peut se produire.

Si Abort est appelé sur un thread qui n’a pas été démarré, le thread s’arrête quand Start est appelé. Si Abort est appelé sur un thread bloqué ou en veille, le thread est interrompu puis abandonné.

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 ThreadState propriété du thread en cours d’abandon. Un ThreadAbortException n’est pas levé dans le thread suspendu tant que Resume n’est pas appelé.

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é.

Si deux appels à Abort sont effectués 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 . Toutefois, une application ne peut pas détecter cette situation.

Une fois que Abort est appelé sur un thread, l’état du thread comprend AbortRequested . Une fois que le thread s’est arrêté suite à un appel réussi à Abort , l’état du thread devient Stopped . Avec des autorisations suffisantes, un thread qui est la cible d’un Abort peut annuler l’abandon à l’aide de la ResetAbort méthode. Pour obtenir un exemple qui illustre l’appel de la ResetAbort méthode, consultez la ThreadAbortException classe.

Voir aussi

S’applique à