Partager via


Thread.Abort Méthode

Définition

Déclenche un ThreadAbortException thread sur lequel il est appelé pour commencer le processus de fin du thread. L’appel de cette méthode met généralement fin au thread.

Surcharges

Nom Description
Abort()
Obsolète.

Déclenche un ThreadAbortException thread sur lequel il est appelé pour commencer le processus de fin du thread. L’appel de cette méthode met généralement fin au thread.

Abort(Object)
Obsolète.

Déclenche un ThreadAbortException thread sur lequel il est appelé, pour commencer le processus de fin du thread tout en fournissant des informations d’exception sur l’arrêt du thread. L’appel de cette méthode met généralement fin au thread.

Remarques

Important

Utilisez la Thread.Abort méthode 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 exécuté ou n’a pas pu s’exécuter quand le ThreadAbortException thread est levée. Vous ne pouvez pas non plus être certain de l’état de votre application ni de l’état de toute application et de l’utilisateur qu’elle doit préserver. Par exemple, l’appel Thread.Abort peut empêcher l’exécution de constructeurs statiques ou la libération des ressources gérées ou non gérées.

Abort()

Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs

Attention

Thread.Abort is not supported and throws PlatformNotSupportedException.

Déclenche un ThreadAbortException thread sur lequel il est appelé pour commencer le processus de fin du thread. L’appel de cette méthode met généralement fin au 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+ 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 génère un avertissement au moment de la compilation. Cette méthode lève une PlatformNotSupportedException exécution au moment de l’exécution sur .NET 5 et versions ultérieures et .NET Core.

Lorsque cette méthode est appelée sur un thread, le système lève un 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 elle est appelée. ResetAbort annule la demande d’abandon et empêche la ThreadAbortException fin du thread. Les blocs non exécutés finally sont exécutés avant l’abandon du thread.

Note

Lorsqu’un thread appelle Abort lui-même, l’effet est similaire à la levée d’une exception ; le ThreadAbortException résultat se produit immédiatement et le résultat est prévisible. Toutefois, si un thread appelle Abort sur un autre thread, l’abandon interrompt le code en cours d’exécution. Il est également possible qu’un constructeur statique puisse être abandonné. Dans de rares cas, cela peut empêcher la création d’instances de cette classe dans ce domaine d’application.

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

Note

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

S’il Abort est appelé sur un thread qui n’a pas été démarré, le thread abandonne quand Start il est appelé. Si Abort elle est appelée sur un thread bloqué ou en veille, le thread est interrompu, puis abandonné.

S’il Abort est appelé sur un thread qui a été suspendu, un ThreadStateException est levée dans le thread qui a appelé Abort, et AbortRequested est ajouté à la ThreadState propriété du thread abandonné. Un ThreadAbortException n’est pas levée dans le thread suspendu tant qu’il Resume n’est pas appelé.

S’il Abort est appelé sur un thread managé pendant qu’il exécute du code non managé, il ThreadAbortException n’est pas levée tant que le thread n’est pas retourné au code managé.

Si deux appels viennent Abort en même temps, il est possible qu’un appel définisse les informations d’état et l’autre appel pour exécuter le Abort. Toutefois, une application ne peut pas détecter cette situation.

Une fois Abort appelé sur un thread, l’état du thread inclut AbortRequested. Une fois le thread terminé suite à un appel réussi, Abortl’état du thread est remplacé Stoppedpar . 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 illustrant l’appel de la ResetAbort méthode, consultez la ThreadAbortException classe.

Voir aussi

S’applique à

Abort(Object)

Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs

Attention

Thread.Abort is not supported and throws PlatformNotSupportedException.

Déclenche un ThreadAbortException thread sur lequel il est appelé, pour commencer le processus de fin du thread tout en fournissant des informations d’exception sur l’arrêt du thread. L’appel de cette méthode met généralement fin au 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 qui contient des informations spécifiques à l’application, telles que l’état, qui peuvent être utilisées par le thread abandonné.

Attributs

Exceptions

.NET Core et .NET 5+ 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 transmettre des informations à un thread qui est abandonné.

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);
        }
    }
}
open System.Threading

let testMethod () =
    try
        while true do
            printfn "New thread running."
            Thread.Sleep 1000
    with :? ThreadAbortException as abortException ->
        printfn $"{abortException.ExceptionState :?> string}"

let newThread = Thread testMethod
newThread.Start()
Thread.Sleep 1000

// Abort newThread.
printfn "Main aborting new thread."
newThread.Abort "Information from Main."

// Wait for the thread to terminate.
newThread.Join()
printfn "New thread terminated - Main exiting."
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 génère un avertissement au moment de la compilation. Cette méthode lève une PlatformNotSupportedException exécution au moment de l’exécution sur .NET 5 et versions ultérieures et .NET Core.

Lorsque cette méthode est appelée sur un thread, le système lève un 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 elle est appelée. ResetAbort annule la demande d’abandon et empêche la ThreadAbortException fin du thread. Les blocs non exécutés finally sont exécutés avant l’abandon du thread.

Note

Lorsqu’un thread appelle Abort lui-même, l’effet est similaire à la levée d’une exception ; le ThreadAbortException résultat se produit immédiatement et le résultat est prévisible. Toutefois, si un thread appelle Abort sur un autre thread, l’abandon interrompt le code en cours d’exécution. Il est possible qu’un constructeur statique puisse être abandonné. Dans de rares cas, cela peut empêcher la création d’instances de cette classe dans ce domaine d’application.

Le thread n’est pas garanti d’abandonner immédiatement, ou du tout. Cette situation peut se produire si un thread effectue une quantité illimitée de calcul dans les blocs appelés dans le finally cadre de la procédure d’abandon, ce qui retarde indéfiniment l’abandon. Pour attendre qu’un thread ait abandonné, 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.

Note

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

S’il Abort est appelé sur un thread qui n’a pas été démarré, le thread abandonne quand Start il est appelé. Si Abort elle est appelée sur un thread bloqué ou en veille, le thread est interrompu, puis abandonné.

S’il Abort est appelé sur un thread qui a été suspendu, un ThreadStateException est levée dans le thread qui a appelé Abort, et AbortRequested est ajouté à la ThreadState propriété du thread abandonné. Un ThreadAbortException n’est pas levée dans le thread suspendu tant qu’il Resume n’est pas appelé.

S’il Abort est appelé sur un thread managé pendant qu’il exécute du code non managé, il ThreadAbortException n’est pas levée tant que le thread n’est pas retourné au code managé.

Si deux appels viennent Abort en même temps, il est possible qu’un appel définisse les informations d’état et l’autre appel pour exécuter le Abort. Toutefois, une application ne peut pas détecter cette situation.

Une fois Abort appelé sur un thread, l’état du thread inclut AbortRequested. Une fois le thread terminé suite à un appel réussi, Abortl’état du thread est remplacé Stoppedpar . 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 illustrant l’appel de la ResetAbort méthode, consultez la ThreadAbortException classe.

Voir aussi

S’applique à