Thread.Abort Metod

Definition

Genererar en ThreadAbortException i tråden som den anropas på för att påbörja processen med att avsluta tråden. Att anropa den här metoden avslutar vanligtvis tråden.

Överlagringar

Name Description
Abort()
Föråldrad.

Genererar en ThreadAbortException i tråden som den anropas på för att påbörja processen med att avsluta tråden. Att anropa den här metoden avslutar vanligtvis tråden.

Abort(Object)
Föråldrad.

Genererar en ThreadAbortException i tråden som den anropas på för att påbörja processen med att avsluta tråden och samtidigt tillhandahålla undantagsinformation om trådavslutningen. Att anropa den här metoden avslutar vanligtvis tråden.

Kommentarer

Important

Thread.Abort Använd metoden med försiktighet. Särskilt när du anropar den för att avbryta en annan tråd än den aktuella tråden vet du inte vilken kod som har körts eller inte kunde köras när den ThreadAbortException genereras. Du kan inte heller vara säker på tillståndet för ditt program eller något program och användartillstånd som det är ansvarigt för att bevara. Anrop Thread.Abort kan till exempel förhindra körning av statiska konstruktorer eller frisläppning av hanterade eller ohanterade resurser.

Abort()

Källa:
Thread.cs
Källa:
Thread.cs
Källa:
Thread.cs
Källa:
Thread.cs
Källa:
Thread.cs

Varning

Thread.Abort is not supported and throws PlatformNotSupportedException.

Genererar en ThreadAbortException i tråden som den anropas på för att påbörja processen med att avsluta tråden. Att anropa den här metoden avslutar vanligtvis tråden.

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 ()
Attribut

Undantag

.NET Core och .NET endast 5+ : I samtliga fall.

Anroparen har inte den behörighet som krävs.

Tråden som avbryts är för närvarande pausad.

Kommentarer

Den här metoden är föråldrad. På .NET 5 och senare versioner genererar anrop av den här metoden en kompileringstidsvarning. Den här metoden genererar en PlatformNotSupportedException vid körning på .NET 5 och senare och .NET Core.

När den här metoden anropas i en tråd genererar systemet en ThreadAbortException i tråden för att avbryta den. ThreadAbortException är ett särskilt undantag som kan fångas av programkod, men som genereras igen i slutet av blocket om det catch inte ResetAbort anropas. ResetAbort avbryter begäran om att avbryta och förhindrar att tråden avslutas ThreadAbortException . Oexecuted finally block körs innan tråden avbryts.

Note

När en tråd anropar Abort sig själv liknar effekten att utlösa ett undantag. Det ThreadAbortException sker omedelbart och resultatet är förutsägbart. Men om en tråd anropar Abort en annan tråd avbryter avbrottet den kod som körs. Det finns också en risk att en statisk konstruktor kan avbrytas. I sällsynta fall kan detta förhindra att instanser av den klassen skapas i programdomänen.

Tråden är inte garanterad att avbryta omedelbart, eller alls. Den här situationen kan inträffa om en tråd utför en obundna mängd beräkningar i de finally block som anropas som en del av abortproceduren, vilket fördröjer avbrytandet på obestämd tid. Om du vill vänta tills en tråd har avbrutits kan du anropa Join metoden i tråden när du Abort har anropat metoden, men det finns ingen garanti för att väntetiden kommer att avslutas.

Note

Tråden som anropar Abort kan blockeras om tråden som avbryts finns i en skyddad kodregion, till exempel en catch block-, finally block- eller begränsad körningsregion. Om tråden som anropar Abort innehåller ett lås som den avbrutna tråden kräver kan ett dödläge uppstå.

Om Abort anropas på en tråd som inte har startats avbryts tråden när Start den anropas. Om Abort anropas på en tråd som är blockerad eller sover avbryts tråden och avbryts sedan.

Om Abort anropas på en tråd som har pausats genereras en ThreadStateException i tråden som heter Abort, och AbortRequested läggs till i ThreadState egenskapen för den tråd som avbryts. A ThreadAbortException utlöses inte i den upphängda tråden förrän den anropas Resume .

Om Abort anropas på en hanterad tråd medan den kör ohanterad kod genereras inte en ThreadAbortException förrän tråden återgår till hanterad kod.

Om två anrop ska Abort komma samtidigt är det möjligt för ett anrop att ange tillståndsinformationen och det andra anropet Abortför att köra . Ett program kan dock inte identifiera den här situationen.

När Abort har anropats i en tråd innehåller AbortRequestedtrådens tillstånd . När tråden har avslutats till följd av ett lyckat anrop till Abortändras trådens tillstånd till Stopped. Med tillräcklig behörighet kan en tråd som är målet för en Abort avbryta avbrottet med hjälp av ResetAbort metoden. Ett exempel som visar hur du anropar ResetAbort metoden finns i ThreadAbortException klassen .

Se även

Gäller för

Abort(Object)

Källa:
Thread.cs
Källa:
Thread.cs
Källa:
Thread.cs
Källa:
Thread.cs
Källa:
Thread.cs

Varning

Thread.Abort is not supported and throws PlatformNotSupportedException.

Genererar en ThreadAbortException i tråden som den anropas på för att påbörja processen med att avsluta tråden och samtidigt tillhandahålla undantagsinformation om trådavslutningen. Att anropa den här metoden avslutar vanligtvis tråden.

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)

Parametrar

stateInfo
Object

Ett objekt som innehåller programspecifik information, till exempel tillstånd, som kan användas av tråden som avbryts.

Attribut

Undantag

.NET Core och .NET endast 5+ : I samtliga fall.

Anroparen har inte den behörighet som krävs.

Tråden som avbryts är för närvarande pausad.

Exempel

Följande kodexempel visar hur du skickar information till en tråd som avbryts.

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

Kommentarer

Den här metoden är föråldrad. På .NET 5 och senare versioner genererar anrop av den här metoden en kompileringstidsvarning. Den här metoden genererar en PlatformNotSupportedException vid körning på .NET 5 och senare och .NET Core.

När den här metoden anropas i en tråd genererar systemet en ThreadAbortException i tråden för att avbryta den. ThreadAbortException är ett särskilt undantag som kan fångas av programkod, men som genereras igen i slutet av blocket om det catch inte ResetAbort anropas. ResetAbort avbryter begäran om att avbryta och förhindrar att tråden avslutas ThreadAbortException . Oexecuted finally block körs innan tråden avbryts.

Note

När en tråd anropar Abort sig själv liknar effekten att utlösa ett undantag. Det ThreadAbortException sker omedelbart och resultatet är förutsägbart. Men om en tråd anropar Abort en annan tråd avbryter avbrottet den kod som körs. Det finns en risk att en statisk konstruktor kan avbrytas. I sällsynta fall kan detta förhindra att instanser av den klassen skapas i programdomänen.

Tråden är inte garanterad att avbryta omedelbart, eller alls. Den här situationen kan inträffa om en tråd utför en obundna mängd beräkningar i de finally block som anropas som en del av abortproceduren, vilket fördröjer avbrytandet på obestämd tid. Om du vill vänta tills en tråd har avbrutits kan du anropa Join metoden i tråden när du Abort har anropat metoden, men det finns ingen garanti för att väntetiden kommer att avslutas.

Note

Tråden som anropar Abort kan blockeras om tråden som avbryts finns i en skyddad kodregion, till exempel en catch block-, finally block- eller begränsad körningsregion. Om tråden som anropar Abort innehåller ett lås som den avbrutna tråden kräver kan ett dödläge uppstå.

Om Abort anropas på en tråd som inte har startats avbryts tråden när Start den anropas. Om Abort anropas på en tråd som är blockerad eller sover avbryts tråden och avbryts sedan.

Om Abort anropas på en tråd som har pausats genereras en ThreadStateException i tråden som heter Abort, och AbortRequested läggs till i ThreadState egenskapen för den tråd som avbryts. A ThreadAbortException utlöses inte i den upphängda tråden förrän den anropas Resume .

Om Abort anropas på en hanterad tråd medan den kör ohanterad kod genereras inte en ThreadAbortException förrän tråden återgår till hanterad kod.

Om två anrop ska Abort komma samtidigt är det möjligt för ett anrop att ange tillståndsinformationen och det andra anropet Abortför att köra . Ett program kan dock inte identifiera den här situationen.

När Abort har anropats i en tråd innehåller AbortRequestedtrådens tillstånd . När tråden har avslutats till följd av ett lyckat anrop till Abortändras trådens tillstånd till Stopped. Med tillräcklig behörighet kan en tråd som är målet för en Abort avbryta avbrottet med hjälp av ResetAbort metoden. Ett exempel som visar hur du anropar ResetAbort metoden finns i ThreadAbortException klassen .

Se även

Gäller för