Thread.Abort Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
ThreadAbortException Wywołuje element w wątku, na którym jest wywoływany, aby rozpocząć proces kończenie wątku. Wywołanie tej metody zwykle kończy wątek.
Przeciążenia
| Nazwa | Opis |
|---|---|
| Abort() |
Przestarzałe.
ThreadAbortException Wywołuje element w wątku, na którym jest wywoływany, aby rozpocząć proces kończenie wątku. Wywołanie tej metody zwykle kończy wątek. |
| Abort(Object) |
Przestarzałe.
ThreadAbortException Wywołuje element w wątku, na którym jest wywoływany, aby rozpocząć proces kończenia wątku, a jednocześnie dostarcza informacje o wyjątkach na temat zakończenia wątku. Wywołanie tej metody zwykle kończy wątek. |
Uwagi
Ważna
Thread.Abort Użyj metody z ostrożnością. Szczególnie w przypadku wywołania go w celu przerwania wątku innego niż bieżący wątek nie wiadomo, jaki kod został wykonany lub nie można wykonać go ThreadAbortException po wyświetleniu. Nie można również mieć pewności co do stanu swojej aplikacji ani stanu aplikacji i użytkownika, za którego zachowanie jest odpowiedzialna aplikacja. Na przykład wywołanie Thread.Abort może uniemożliwić wykonanie konstruktorów statycznych lub zwolnienie zarządzanych albo niezarządzanych zasobów.
Abort()
- Źródło:
- Thread.cs
- Źródło:
- Thread.cs
- Źródło:
- Thread.cs
- Źródło:
- Thread.cs
- Źródło:
- Thread.cs
Uwaga
Thread.Abort is not supported and throws PlatformNotSupportedException.
ThreadAbortException Wywołuje element w wątku, na którym jest wywoływany, aby rozpocząć proces kończenie wątku. Wywołanie tej metody zwykle kończy wątek.
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 ()
- Atrybuty
Wyjątki
Tylko platformy .NET Core i .NET 5+: we wszystkich przypadkach.
Obiekt wywołujący nie ma wymaganych uprawnień.
Przerywany wątek jest obecnie zawieszony.
Uwagi
Ta metoda jest przestarzała. Na platformie .NET 5 lub nowszych wersjach wywołanie tej metody powoduje wygenerowanie ostrzeżenia w czasie kompilacji. Ta metoda zgłasza PlatformNotSupportedException czas wykonywania na platformie .NET 5 lub nowszym oraz na platformie .NET Core.
Gdy ta metoda jest wywoływana w wątku, system zgłasza ThreadAbortException element w wątku, aby go przerwać.
ThreadAbortException jest specjalnym wyjątkiem, który może zostać przechwycony przez kod aplikacji, ale jest zgłaszany ponownie na końcu catch bloku, chyba że ResetAbort jest wywoływany.
ResetAbort Anuluje żądanie przerwania i uniemożliwia ThreadAbortException zakończenie wątku. Nieskonseksowane finally bloki są wykonywane przed przerwanie wątku.
Uwaga / Notatka
Gdy wątek wywołuje Abort się samodzielnie, efekt jest podobny do zgłaszania wyjątku; ThreadAbortException występuje natychmiast, a wynik jest przewidywalny. Jeśli jednak jeden wątek wywołuje Abort inny wątek, przerwanie przerywa działanie dowolnego kodu. Istnieje również prawdopodobieństwo przerwania konstruktora statycznego. W rzadkich przypadkach może to uniemożliwić tworzenie wystąpień tej klasy w tej domenie aplikacji.
Wątek nie gwarantuje natychmiastowego przerwania ani w ogóle. Taka sytuacja może wystąpić, jeśli wątek wykonuje niezwiązaną ilość obliczeń w finally blokach, które są wywoływane w ramach procedury przerwania, tym samym przez czas nieokreślony opóźniając przerwanie. Aby poczekać na przerwanie wątku, możesz wywołać Join metodę w wątku po wywołaniu Abort metody, ale nie ma gwarancji, że oczekiwanie zakończy się.
Uwaga / Notatka
Wątek, który wywołuje Abort , może blokować, jeśli przerwany wątek znajduje się w chronionym regionie kodu, takim jak catch blok, finally blok lub ograniczony region wykonywania. Jeśli wątek, który wywołuje Abort blokadę wymaganą przez przerwany wątek, może wystąpić zakleszczenie.
Jeśli Abort jest wywoływany w wątku, który nie został uruchomiony, wątek zostanie przerwany po Start wywołaniu. Jeśli Abort jest wywoływany w wątku, który jest zablokowany lub jest spany, wątek zostanie przerwany, a następnie przerwany.
Jeśli Abort element jest wywoływany w wątku, który został zawieszony, ThreadStateException element jest zgłaszany w wątku o nazwie Aborti AbortRequested jest dodawany do ThreadState właściwości przerywanego wątku. Element A ThreadAbortException nie jest zgłaszany w zawieszonym wątku, dopóki Resume nie zostanie wywołany.
Jeśli Abort jest wywoływany w zarządzanym wątku podczas wykonywania niezarządzanego kodu, ThreadAbortException element nie jest zgłaszany, dopóki wątek nie powróci do kodu zarządzanego.
Jeśli dwa wywołania pochodzą Abort w tym samym czasie, możliwe jest, aby jedno wywołanie ustawiło informacje o stanie i drugie wywołanie w celu wykonania Abort. Jednak aplikacja nie może wykryć tej sytuacji.
Po Abort wywołaniu w wątku stan wątku obejmuje .AbortRequested Po zakończeniu wątku w wyniku pomyślnego wywołania do Abortelementu stan wątku zostanie zmieniony na Stopped. Przy wystarczających uprawnieniach wątek, który jest celem obiektu Abort docelowego, może anulować przerwanie przy użyciu ResetAbort metody . Przykład przedstawiający wywoływanie ResetAbort metody można znaleźć w ThreadAbortException klasie .
Zobacz też
- ThreadAbortException
- Aborted
- AbortRequested
- Wątki i wątkowość
- Używanie wątków i programowania wielowątkowego
- Niszczenie wątków
Dotyczy
Abort(Object)
- Źródło:
- Thread.cs
- Źródło:
- Thread.cs
- Źródło:
- Thread.cs
- Źródło:
- Thread.cs
- Źródło:
- Thread.cs
Uwaga
Thread.Abort is not supported and throws PlatformNotSupportedException.
ThreadAbortException Wywołuje element w wątku, na którym jest wywoływany, aby rozpocząć proces kończenia wątku, a jednocześnie dostarcza informacje o wyjątkach na temat zakończenia wątku. Wywołanie tej metody zwykle kończy wątek.
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)
Parametry
- stateInfo
- Object
Obiekt zawierający informacje specyficzne dla aplikacji, takie jak stan, który może być używany przez przerywany wątek.
- Atrybuty
Wyjątki
Tylko platformy .NET Core i .NET 5+: we wszystkich przypadkach.
Obiekt wywołujący nie ma wymaganych uprawnień.
Przerywany wątek jest obecnie zawieszony.
Przykłady
Poniższy przykład kodu przedstawia sposób przekazywania informacji do wątku, który jest przerywany.
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
Uwagi
Ta metoda jest przestarzała. Na platformie .NET 5 lub nowszych wersjach wywołanie tej metody powoduje wygenerowanie ostrzeżenia w czasie kompilacji. Ta metoda zgłasza PlatformNotSupportedException czas wykonywania na platformie .NET 5 lub nowszym oraz na platformie .NET Core.
Gdy ta metoda jest wywoływana w wątku, system zgłasza ThreadAbortException element w wątku, aby go przerwać.
ThreadAbortException jest specjalnym wyjątkiem, który może zostać przechwycony przez kod aplikacji, ale jest zgłaszany ponownie na końcu catch bloku, chyba że ResetAbort jest wywoływany.
ResetAbort Anuluje żądanie przerwania i uniemożliwia ThreadAbortException zakończenie wątku. Nieskonseksowane finally bloki są wykonywane przed przerwanie wątku.
Uwaga / Notatka
Gdy wątek wywołuje Abort się samodzielnie, efekt jest podobny do zgłaszania wyjątku; ThreadAbortException występuje natychmiast, a wynik jest przewidywalny. Jeśli jednak jeden wątek wywołuje Abort inny wątek, przerwanie przerywa działanie dowolnego kodu. Istnieje szansa, że konstruktor statyczny może zostać przerwany. W rzadkich przypadkach może to uniemożliwić tworzenie wystąpień tej klasy w tej domenie aplikacji.
Wątek nie gwarantuje natychmiastowego przerwania ani w ogóle. Taka sytuacja może wystąpić, jeśli wątek wykonuje niezwiązaną ilość obliczeń w finally blokach, które są wywoływane w ramach procedury przerwania, tym samym przez czas nieokreślony opóźniając przerwanie. Aby poczekać na przerwanie wątku, możesz wywołać Join metodę w wątku po wywołaniu Abort metody, ale nie ma gwarancji, że oczekiwanie zakończy się.
Uwaga / Notatka
Wątek, który wywołuje Abort , może blokować, jeśli przerwany wątek znajduje się w chronionym regionie kodu, takim jak catch blok, finally blok lub ograniczony region wykonywania. Jeśli wątek, który wywołuje Abort blokadę wymaganą przez przerwany wątek, może wystąpić zakleszczenie.
Jeśli Abort jest wywoływany w wątku, który nie został uruchomiony, wątek zostanie przerwany po Start wywołaniu. Jeśli Abort jest wywoływany w wątku, który jest zablokowany lub jest spany, wątek zostanie przerwany, a następnie przerwany.
Jeśli Abort element jest wywoływany w wątku, który został zawieszony, ThreadStateException element jest zgłaszany w wątku o nazwie Aborti AbortRequested jest dodawany do ThreadState właściwości przerywanego wątku. Element A ThreadAbortException nie jest zgłaszany w zawieszonym wątku, dopóki Resume nie zostanie wywołany.
Jeśli Abort jest wywoływany w zarządzanym wątku podczas wykonywania niezarządzanego kodu, ThreadAbortException element nie jest zgłaszany, dopóki wątek nie powróci do kodu zarządzanego.
Jeśli dwa wywołania pochodzą Abort w tym samym czasie, możliwe jest, aby jedno wywołanie ustawiło informacje o stanie i drugie wywołanie w celu wykonania Abort. Jednak aplikacja nie może wykryć tej sytuacji.
Po Abort wywołaniu w wątku stan wątku obejmuje .AbortRequested Po zakończeniu wątku w wyniku pomyślnego wywołania do Abortelementu stan wątku zostanie zmieniony na Stopped. Przy wystarczających uprawnieniach wątek, który jest celem obiektu Abort docelowego, może anulować przerwanie przy użyciu ResetAbort metody . Przykład przedstawiający wywoływanie ResetAbort metody można znaleźć w ThreadAbortException klasie .
Zobacz też
- ThreadAbortException
- Aborted
- AbortRequested
- Wątki i wątkowość
- Używanie wątków i programowania wielowątkowego
- Niszczenie wątków