Thread.Abort Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Genera un ThreadAbortException oggetto nel thread in cui viene richiamato, per avviare il processo di terminazione del thread. La chiamata a questo metodo in genere termina il thread.
Overload
| Nome | Descrizione |
|---|---|
| Abort() |
Obsoleti.
Genera un ThreadAbortException oggetto nel thread su cui viene richiamato, per avviare il processo di terminazione del thread. La chiamata a questo metodo in genere termina il thread. |
| Abort(Object) |
Obsoleti.
Genera un ThreadAbortException oggetto nel thread in cui viene richiamato, per iniziare il processo di terminazione del thread fornendo al tempo stesso informazioni sulle eccezioni relative alla terminazione del thread. La chiamata a questo metodo in genere termina il thread. |
Commenti
Importante
Usare il Thread.Abort metodo con cautela. In particolare quando si chiama per interrompere un thread diverso dal thread corrente, non si sa quale codice è stato eseguito o non è riuscito a eseguire quando viene generato .ThreadAbortException Non puoi essere certo dello stato della tua applicazione o di qualsiasi applicazione e stato dell'utente di cui è responsabile del mantenimento. Ad esempio, la chiamata Thread.Abort può impedire l'esecuzione di costruttori statici o il rilascio di risorse gestite o non gestite.
Abort()
- Origine:
- Thread.cs
- Origine:
- Thread.cs
- Origine:
- Thread.cs
- Origine:
- Thread.cs
- Origine:
- Thread.cs
Attenzione
Thread.Abort is not supported and throws PlatformNotSupportedException.
Genera un ThreadAbortException oggetto nel thread su cui viene richiamato, per avviare il processo di terminazione del thread. La chiamata a questo metodo in genere termina il 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 ()
- Attributi
Eccezioni
Solo .NET Core e .NET 5+: in tutti i casi.
Il chiamante non dispone dell'autorizzazione richiesta.
Il thread interrotto è attualmente sospeso.
Commenti
Questo metodo è obsoleto. In .NET 5 e versioni successive la chiamata a questo metodo genera un avviso in fase di compilazione. Questo metodo genera un'eccezione PlatformNotSupportedException in fase di esecuzione in .NET 5 e versioni successive e .NET Core.
Quando questo metodo viene richiamato su un thread, il sistema genera un'eccezione ThreadAbortException nel thread per interromperla.
ThreadAbortException è un'eccezione speciale che può essere intercettata dal codice dell'applicazione, ma viene generata nuovamente alla fine del catch blocco, a meno che non ResetAbort venga chiamato.
ResetAbort annulla la richiesta di interrompere e impedisce all'oggetto ThreadAbortException di terminare il thread.
finally I blocchi non eseguiti vengono eseguiti prima che il thread venga interrotto.
Annotazioni
Quando un thread chiama Abort se stesso, l'effetto è simile alla generazione di un'eccezione, che ThreadAbortException si verifica immediatamente e il risultato è prevedibile. Tuttavia, se un thread chiama Abort su un altro thread, l'interruzione interrompe qualsiasi codice in esecuzione. È anche possibile che un costruttore statico venga interrotto. In rari casi, ciò potrebbe impedire la creazione di istanze di tale classe in tale dominio applicazione.
Non è garantito che il thread interrompa immediatamente o affatto. Questa situazione può verificarsi se un thread esegue una quantità di calcolo non associato nei finally blocchi chiamati come parte della routine di interruzione, ritardando in modo illimitato l'interruzione. Per attendere l'interruzione di un thread, è possibile chiamare il Join metodo sul thread dopo aver chiamato il Abort metodo , ma non esiste alcuna garanzia che l'attesa terminerà.
Annotazioni
Il thread che chiama Abort potrebbe bloccare se il thread interrotto si trova in un'area protetta di codice, ad esempio un blocco, finally un blocco o un'area catch di esecuzione vincolata. Se il thread che chiama Abort contiene un blocco richiesto dal thread interrotto, può verificarsi un deadlock.
Se Abort viene chiamato su un thread che non è stato avviato, il thread interromperà quando Start viene chiamato. Se Abort viene chiamato su un thread bloccato o in sospensione, il thread viene interrotto e quindi interrotto.
Se Abort viene chiamato su un thread sospeso, viene generata un'eccezione ThreadStateException nel thread che ha chiamato Aborte AbortRequested viene aggiunta alla ThreadState proprietà del thread interrotto. Un ThreadAbortException oggetto non viene generato nel thread sospeso fino a quando Resume non viene chiamato .
Se Abort viene chiamato su un thread gestito durante l'esecuzione di codice non gestito, non viene generata un'eccezione ThreadAbortException finché il thread non torna al codice gestito.
Se due chiamate vengono Abort eseguite contemporaneamente, è possibile che una chiamata imposti le informazioni sullo stato e l'altra per eseguire .Abort Tuttavia, un'applicazione non è in grado di rilevare questa situazione.
Dopo Abort che viene richiamato su un thread, lo stato del thread include AbortRequested. Dopo che il thread è terminato in seguito a una chiamata riuscita a Abort, lo stato del thread viene modificato in Stopped. Con autorizzazioni sufficienti, un thread che è la destinazione di un Abort può annullare l'interruzione usando il ResetAbort metodo . Per un esempio che illustra la chiamata al ResetAbort metodo , vedere la ThreadAbortException classe .
Vedi anche
- ThreadAbortException
- Aborted
- AbortRequested
- Thread e threading
- Uso dei thread e gestione dei thread
- Eliminazione di thread
Si applica a
Abort(Object)
- Origine:
- Thread.cs
- Origine:
- Thread.cs
- Origine:
- Thread.cs
- Origine:
- Thread.cs
- Origine:
- Thread.cs
Attenzione
Thread.Abort is not supported and throws PlatformNotSupportedException.
Genera un ThreadAbortException oggetto nel thread in cui viene richiamato, per iniziare il processo di terminazione del thread fornendo al tempo stesso informazioni sulle eccezioni relative alla terminazione del thread. La chiamata a questo metodo in genere termina il 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)
Parametri
- stateInfo
- Object
Oggetto che contiene informazioni specifiche dell'applicazione, ad esempio lo stato, che può essere utilizzato dal thread interrotto.
- Attributi
Eccezioni
Solo .NET Core e .NET 5+: in tutti i casi.
Il chiamante non dispone dell'autorizzazione richiesta.
Il thread interrotto è attualmente sospeso.
Esempio
Nell'esempio di codice seguente viene illustrato come passare informazioni a un thread interrotto.
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
Commenti
Questo metodo è obsoleto. In .NET 5 e versioni successive la chiamata a questo metodo genera un avviso in fase di compilazione. Questo metodo genera un'eccezione PlatformNotSupportedException in fase di esecuzione in .NET 5 e versioni successive e .NET Core.
Quando questo metodo viene richiamato su un thread, il sistema genera un'eccezione ThreadAbortException nel thread per interromperla.
ThreadAbortException è un'eccezione speciale che può essere intercettata dal codice dell'applicazione, ma viene generata nuovamente alla fine del catch blocco, a meno che non ResetAbort venga chiamato.
ResetAbort annulla la richiesta di interrompere e impedisce all'oggetto ThreadAbortException di terminare il thread.
finally I blocchi non eseguiti vengono eseguiti prima che il thread venga interrotto.
Annotazioni
Quando un thread chiama Abort se stesso, l'effetto è simile alla generazione di un'eccezione, che ThreadAbortException si verifica immediatamente e il risultato è prevedibile. Tuttavia, se un thread chiama Abort su un altro thread, l'interruzione interrompe qualsiasi codice in esecuzione. È possibile che un costruttore statico venga interrotto. In rari casi, ciò potrebbe impedire la creazione di istanze di tale classe in tale dominio applicazione.
Non è garantito che il thread interrompa immediatamente o affatto. Questa situazione può verificarsi se un thread esegue una quantità di calcolo non associato nei finally blocchi chiamati come parte della routine di interruzione, ritardando in modo illimitato l'interruzione. Per attendere l'interruzione di un thread, è possibile chiamare il Join metodo sul thread dopo aver chiamato il Abort metodo , ma non esiste alcuna garanzia che l'attesa terminerà.
Annotazioni
Il thread che chiama Abort potrebbe bloccare se il thread interrotto si trova in un'area protetta di codice, ad esempio un blocco, finally un blocco o un'area catch di esecuzione vincolata. Se il thread che chiama Abort contiene un blocco richiesto dal thread interrotto, può verificarsi un deadlock.
Se Abort viene chiamato su un thread che non è stato avviato, il thread interromperà quando Start viene chiamato. Se Abort viene chiamato su un thread bloccato o in sospensione, il thread viene interrotto e quindi interrotto.
Se Abort viene chiamato su un thread sospeso, viene generata un'eccezione ThreadStateException nel thread che ha chiamato Aborte AbortRequested viene aggiunta alla ThreadState proprietà del thread interrotto. Un ThreadAbortException oggetto non viene generato nel thread sospeso fino a quando Resume non viene chiamato .
Se Abort viene chiamato su un thread gestito durante l'esecuzione di codice non gestito, non viene generata un'eccezione ThreadAbortException finché il thread non torna al codice gestito.
Se due chiamate vengono Abort eseguite contemporaneamente, è possibile che una chiamata imposti le informazioni sullo stato e l'altra per eseguire .Abort Tuttavia, un'applicazione non è in grado di rilevare questa situazione.
Dopo Abort che viene richiamato su un thread, lo stato del thread include AbortRequested. Dopo che il thread è terminato in seguito a una chiamata riuscita a Abort, lo stato del thread viene modificato in Stopped. Con autorizzazioni sufficienti, un thread che è la destinazione di un Abort può annullare l'interruzione usando il ResetAbort metodo . Per un esempio che illustra la chiamata al ResetAbort metodo , vedere la ThreadAbortException classe .
Vedi anche
- ThreadAbortException
- Aborted
- AbortRequested
- Thread e threading
- Uso dei thread e gestione dei thread
- Eliminazione di thread