Thread.Abort Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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
- ThreadAbortException
- Aborted
- AbortRequested
- Trådar och gängning
- Använda trådar och trådhantering
- Förstöra trådar
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
- ThreadAbortException
- Aborted
- AbortRequested
- Trådar och gängning
- Använda trådar och trådhantering
- Förstöra trådar