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'eccezione ThreadAbortException nel thread in cui viene richiamato, per iniziare il processo di terminazione del thread. La chiamata a questo metodo in genere termina il thread.
Overload
Abort() |
Obsoleta.
Genera un'eccezione ThreadAbortException nel thread in cui viene richiamato, per iniziare il processo di terminazione del thread. La chiamata a questo metodo in genere termina il thread. |
Abort(Object) |
Obsoleta.
Genera un'eccezione ThreadAbortException nel thread in cui viene richiamato per iniziare il processo di terminazione del thread fornendo anche informazioni sull'eccezione relative alla terminazione del thread. La chiamata a questo metodo in genere termina il thread. |
Commenti
Importante
Il Thread.Abort
metodo deve essere usato con cautela. In particolare quando si chiama per interrompere un thread diverso dal thread corrente, non si sa quale codice è stato eseguito o non è stato eseguito quando viene ThreadAbortException generata l'eccezione . Non è inoltre possibile essere certi dello stato dell'applicazione o di qualsiasi applicazione e stato utente responsabile della conservazione. Ad esempio, la Thread.Abort
chiamata può impedire l'esecuzione di costruttori statici o il rilascio di risorse non gestite.
Abort()
Attenzione
Thread.Abort is not supported and throws PlatformNotSupportedException.
Genera un'eccezione ThreadAbortException nel thread in cui viene richiamato, per iniziare 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 che si sta interrompendo è attualmente sospeso.
Commenti
Questo metodo è obsoleto. In .NET 5 e versioni successive, la chiamata di 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 in un thread, il sistema genera ThreadAbortException un'eccezione nel thread per interromperlo. ThreadAbortException
è un'eccezione speciale che può essere rilevata dal codice dell'applicazione, ma viene generata nuovamente alla fine del blocco a meno che catch
non ResetAbort venga chiamato. ResetAbort
annulla la richiesta di interruzione e impedisce ThreadAbortException
all'oggetto di terminare il thread. I blocchi non finally
eseguiti vengono eseguiti prima dell'interruzione del thread.
Nota
Quando un thread chiama su se stesso, l'effetto è simile alla generazione di un'eccezione. Si verifica immediatamente e il Abort
ThreadAbortException risultato è prevedibile. Tuttavia, se un thread chiama Abort
su un altro thread, l'interruzione interrompe il codice in esecuzione. Esiste anche la possibilità che un costruttore statico possa essere interrotto. In rari casi, ciò potrebbe impedire la creazione di istanze di tale classe nel dominio applicazione. Nelle versioni .NET Framework 1.0 e 1.1, è possibile che il thread possa interrompersi durante l'esecuzione di un blocco, nel qual caso il blocco viene finally
finally
interrotto.
Non è garantito che il thread si interrompi immediatamente o affatto. Questa situazione può verificarsi se un thread esegue una quantità illimitata di calcolo nei blocchi chiamati come parte della procedura di interruzione, ritardando finally
indefinitamente l'interruzione. Per attendere l'interruzione di un thread, è possibile chiamare il metodo sul thread dopo aver chiamato il metodo , ma non è garantita la fine Join Abort dell'attesa.
Nota
Il thread che chiama potrebbe bloccarsi se il thread che viene interrotto si trova in un'area protetta di codice, ad esempio un blocco, un blocco o un'area Abort catch
di esecuzione finally
vincolata. Se il thread che chiama contiene un blocco richiesto dal thread interrotto, può verificarsi Abort un deadlock.
Se Abort
viene chiamato su un thread che non è stato avviato, il thread verrà interrotto quando Start viene chiamato. Se Abort
viene chiamato su un thread bloccato o in stato di sospensione, il thread viene interrotto e quindi interrotto.
Se viene chiamato su un thread sospeso, viene generata un'eccezione nel thread che ha chiamato e viene aggiunto alla proprietà del Abort
ThreadStateException thread Abort AbortRequested ThreadState interrotto. Un oggetto non viene generato nel thread sospeso fino ThreadAbortException a quando non viene chiamato Resume .
Se viene chiamato su un thread gestito durante l'esecuzione di codice non gestito, non viene generata un'eccezione finché il Abort
thread non torna al codice ThreadAbortException
gestito.
Se due chiamate vengono eseguite contemporaneamente, è possibile che una chiamata imposta le informazioni sullo stato e l'altra Abort
chiami per eseguire Abort
l'oggetto . 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 è stato terminato in seguito a una chiamata riuscita a , lo Abort
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 ResetAbort
al metodo , vedere la classe ThreadAbortException
.
Vedi anche
- ThreadAbortException
- Aborted
- AbortRequested
- Thread e threading
- Utilizzo di thread e threading
- Eliminazione definitiva di thread
Si applica a
Abort(Object)
Attenzione
Thread.Abort is not supported and throws PlatformNotSupportedException.
Genera un'eccezione ThreadAbortException nel thread in cui viene richiamato per iniziare il processo di terminazione del thread fornendo anche informazioni sull'eccezione 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 possono essere usate dal thread interrotto.
- Attributi
Eccezioni
Solo .NET Core e .NET 5+: In tutti i casi.
Il chiamante non dispone dell'autorizzazione richiesta.
Il thread che si sta interrompendo è attualmente sospeso.
Esempio
Nell'esempio di codice seguente viene illustrato come passare informazioni a un thread interrotto.
using namespace System;
using namespace System::Threading;
ref class Test
{
private:
Test(){}
public:
static void TestMethod()
{
try
{
while ( true )
{
Console::WriteLine( "New thread running." );
Thread::Sleep( 1000 );
}
}
catch ( ThreadAbortException^ abortException )
{
Console::WriteLine( dynamic_cast<String^>(abortException->ExceptionState) );
}
}
};
int main()
{
Thread^ newThread = gcnew Thread( gcnew ThreadStart( &Test::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." );
}
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);
}
}
}
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 di questo metodo genera un avviso in fase di compilazione. Questo metodo genera PlatformNotSupportedException un'eccezione in fase di esecuzione in .NET 5 e versioni successive e .NET Core.
Quando questo metodo viene richiamato su un thread, il sistema genera ThreadAbortException un'eccezione nel thread per interromperlo. ThreadAbortException
è un'eccezione speciale che può essere intercettata dal codice dell'applicazione, ma viene generata nuovamente alla fine del blocco a meno che catch
ResetAbort non venga chiamato . ResetAbort
annulla la richiesta di interruzione e impedisce a ThreadAbortException
di terminare il thread. I blocchi non finally
eseguiti vengono eseguiti prima dell'interruzione del thread.
Nota
Quando un thread chiama su se stesso, l'effetto è simile alla generazione di un'eccezione; l'evento si verifica Abort
immediatamente e il risultato è ThreadAbortException prevedibile. Tuttavia, se un thread chiama Abort
su un altro thread, l'interruzione interrompe il codice in esecuzione. È possibile che un costruttore statico possa essere interrotto. In rari casi, ciò potrebbe impedire la creazione di istanze di tale classe nel dominio applicazione. Nelle versioni .NET Framework 1.0 e 1.1 è possibile che il thread si interrompi durante l'esecuzione di un blocco, nel qual caso il blocco viene finally
finally
interrotto.
Non è garantito che il thread si interrompi immediatamente o affatto. Questa situazione può verificarsi se un thread esegue una quantità illimitata di calcoli nei blocchi chiamati come parte della procedura di interruzione, ritardando finally
indefinitamente l'interruzione. Per attendere l'interruzione di un thread, è possibile chiamare il metodo sul thread dopo aver chiamato il metodo , ma non vi è alcuna garanzia che Join Abort l'attesa terminerà.
Nota
Il thread che chiama potrebbe bloccarsi se il thread interrotto si trova in un'area protetta di codice, ad esempio un blocco, un blocco o un'area Abort catch
di esecuzione finally
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 verrà interrotto quando viene chiamato Start . Se Abort
viene chiamato su un thread bloccato o in sospensione, il thread viene interrotto e quindi interrotto.
Se viene chiamato su un thread sospeso, viene generata un'eccezione nel thread che ha chiamato e viene aggiunto alla proprietà del Abort
ThreadStateException thread Abort AbortRequested ThreadState interrotto. Un ThreadAbortException oggetto non viene generato nel thread sospeso fino a quando non viene chiamato Resume .
Se viene chiamato su un thread gestito mentre è in esecuzione codice non gestito, non viene generata un'eccezione finché il Abort
thread non torna al codice ThreadAbortException
gestito.
Se due chiamate vengono eseguite contemporaneamente, è possibile che una chiamata imposta le informazioni sullo stato e l'altra Abort
chiami 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 è stato terminato in seguito a una chiamata riuscita a Abort
, lo stato del thread viene modificato in Stopped . Con autorizzazioni sufficienti, un thread di destinazione di può annullare Abort
l'interruzione usando il ResetAbort
metodo . Per un esempio che illustra la chiamata ResetAbort
al metodo , vedere la classe ThreadAbortException
.
Vedi anche
- ThreadAbortException
- Aborted
- AbortRequested
- Thread e threading
- Utilizzo di thread e threading
- Eliminazione definitiva di thread