Thread.Abort Metodo

Definizione

Genera un'eccezione ThreadAbortException nel thread in cui viene richiamato, per iniziare il processo di terminazione del thread.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. La chiamata a questo metodo in genere termina il thread.Calling this method usually terminates the thread.

Overload

Abort()

Genera un'eccezione ThreadAbortException nel thread in cui viene richiamato, per iniziare il processo di terminazione del thread.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. La chiamata a questo metodo in genere termina il thread.Calling this method usually terminates the thread.

Abort(Object)

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.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread while also providing exception information about the thread termination. La chiamata a questo metodo in genere termina il thread.Calling this method usually terminates the thread.

Commenti

Importante

Il metodo Thread.Abort deve essere utilizzato con cautela.The Thread.Abort method should be used with caution. In particolare, quando si chiama per interrompere un thread diverso dal thread corrente, non è possibile sapere quale codice è stato eseguito o non è stato eseguito quando viene generato il ThreadAbortException, né si può essere certi dello stato dell'applicazione o dell'applicazione e dello stato utente responsabilità Sible per la conservazione.Particularly when you call it to abort a thread other than the current thread, you do not know what code has executed or failed to execute when the ThreadAbortException is thrown, nor can you be certain of the state of your application or any application and user state that it is responsible for preserving. Ad esempio, la chiamata a Thread.Abort può impedire l'esecuzione di costruttori statici o impedire il rilascio di risorse non gestite.For example, calling Thread.Abort may prevent static constructors from executing or prevent the release of unmanaged resources.

Si noti che il metodo Thread.Abort non è supportato in .NET Core.Note that the Thread.Abort method is not supported on .NET Core.

Abort()

Genera un'eccezione ThreadAbortException nel thread in cui viene richiamato, per iniziare il processo di terminazione del thread.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. La chiamata a questo metodo in genere termina il thread.Calling this method usually terminates the thread.

public:
 void Abort();
public void Abort ();
member this.Abort : unit -> unit
Public Sub Abort ()

Eccezioni

Solo .NET Core: questo membro non è supportato..NET Core only: This member is not supported.

Il chiamante non dispone dell'autorizzazione richiesta.The caller does not have the required permission.

Il thread che si sta interrompendo è attualmente sospeso.The thread that is being aborted is currently suspended.

Commenti

Quando questo metodo viene richiamato su un thread, il sistema genera un ThreadAbortException nel thread per interromperlo.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException è un'eccezione speciale che può essere rilevata dal codice dell'applicazione, ma viene generata nuovamente alla fine del blocco catch a meno che non venga chiamato ResetAbort.ThreadAbortException is a special exception that can be caught by application code, but is re-thrown at the end of the catch block unless ResetAbort is called. ResetAbort Annulla la richiesta di interruzione e impedisce al ThreadAbortException di terminare il thread.ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. I blocchi finally non eseguiti vengono eseguiti prima che il thread venga interrotto.Unexecuted finally blocks are executed before the thread is aborted.

Nota

Quando un thread chiama Abort su se stesso, l'effetto è simile alla generazione di un'eccezione. il ThreadAbortException si verifica immediatamente e il risultato è prevedibile.When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. Tuttavia, se un thread chiama Abort su un altro thread, Interrompi interrompe il codice in esecuzione.However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. Esiste anche la possibilità che un costruttore statico venga interrotto.There is also a chance that a static constructor could be aborted. In rari casi, questo potrebbe impedire la creazione di istanze di tale classe in tale dominio applicazione.In rare cases, this might prevent instances of that class from being created in that application domain. Nelle versioni .NET Framework 1,0 e 1,1 è possibile che il thread venga interrotto mentre è in esecuzione un blocco finally, nel qual caso il blocco finally viene interrotto.In the .NET Framework versions 1.0 and 1.1, there is a chance the thread could abort while a finally block is running, in which case the finally block is aborted.

Non è garantito che il thread venga interrotto immediatamente o.The thread is not guaranteed to abort immediately, or at all. Questa situazione può verificarsi se un thread esegue una quantità illimitata di calcoli nei blocchi finally chiamati come parte della procedura di interruzione, ritardando pertanto l'interruzione.This situation can occur if a thread does an unbounded amount of computation in the finally blocks that are called as part of the abort procedure, thereby indefinitely delaying the abort. Per attendere fino a quando un thread non è stato interrotto, è possibile chiamare il metodo Join sul thread dopo aver chiamato il metodo Abort, ma non è garantito che l'attesa venga terminata.To wait until a thread has aborted, you can call the Join method on the thread after calling the Abort method, but there is no guarantee the wait will end.

Nota

Il thread che chiama Abort potrebbe bloccarsi se il thread che viene interrotto si trova in un'area protetta di codice, ad esempio un blocco catch, un blocco finally o un'area di esecuzione vincolata.The thread that calls Abort might block if the thread that is being aborted is in a protected region of code, such as a catch block, finally block, or constrained execution region. Se il thread che chiama Abort include un blocco richiesto dal thread interrotto, è possibile che si verifichi un deadlock.If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

Se Abort viene chiamato su un thread che non è stato avviato, il thread verrà interrotto quando viene chiamato Start.If Abort is called on a thread that has not been started, the thread will abort when Start is called. Se Abort viene chiamato su un thread bloccato o in sospensione, il thread viene interrotto e quindi interrotto.If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

Se Abort viene chiamato su un thread che è stato sospeso, viene generata un'ThreadStateException nel thread che ha chiamato Abort e viene aggiunto AbortRequested alla proprietà ThreadState del thread interrotto.If Abort is called on a thread that has been suspended, a ThreadStateException is thrown in the thread that called Abort, and AbortRequested is added to the ThreadState property of the thread being aborted. Un ThreadAbortException non viene generato nel thread sospeso fino a quando non viene chiamato Resume.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

Se Abort viene chiamato su un thread gestito durante l'esecuzione di codice non gestito, un ThreadAbortException non viene generato finché il thread non torna al codice gestito.If Abort is called on a managed thread while it is executing unmanaged code, a ThreadAbortException is not thrown until the thread returns to managed code.

Se due chiamate a Abort provengono allo stesso tempo, è possibile che una chiamata imposti le informazioni sullo stato e l'altra chiamata per eseguire il Abort.If two calls to Abort come at the same time, it is possible for one call to set the state information and the other call to execute the Abort. Tuttavia, un'applicazione non è in grado di rilevare questa situazione.However, an application cannot detect this situation.

Dopo che Abort viene richiamato su un thread, lo stato del thread include AbortRequested.After Abort is invoked on a thread, the state of the thread includes AbortRequested. Dopo che il thread è stato terminato in seguito a una chiamata riuscita a Abort, lo stato del thread viene modificato in Stopped.After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. Con autorizzazioni sufficienti, un thread che è la destinazione di un Abort può annullare l'interruzione usando il metodo ResetAbort.With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. Per un esempio in cui viene illustrata la chiamata al metodo ResetAbort, vedere la classe ThreadAbortException.For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

Sicurezza

SecurityPermission
per operazioni avanzate sui thread.for advanced operations on threads. Enumerazione associata: ControlThread.Associated enumeration: ControlThread.

Vedi anche

Abort(Object)

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.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread while also providing exception information about the thread termination. La chiamata a questo metodo in genere termina il thread.Calling this method usually terminates the thread.

public:
 void Abort(System::Object ^ stateInfo);
public void Abort (object stateInfo);
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.An object that contains application-specific information, such as state, which can be used by the thread being aborted.

Eccezioni

Solo .NET Core: questo membro non è supportato..NET Core only: This member is not supported.

Il chiamante non dispone dell'autorizzazione richiesta.The caller does not have the required permission.

Il thread che si sta interrompendo è attualmente sospeso.The thread that is being aborted is currently suspended.

Esempi

Nell'esempio di codice seguente viene illustrato come passare informazioni a un thread che viene interrotto.The following code example shows how to pass information to a thread that is being aborted.

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

Quando questo metodo viene richiamato su un thread, il sistema genera un ThreadAbortException nel thread per interromperlo.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException è un'eccezione speciale che può essere rilevata dal codice dell'applicazione, ma viene generata nuovamente alla fine del blocco catch a meno che non venga chiamato ResetAbort.ThreadAbortException is a special exception that can be caught by application code, but is re-thrown at the end of the catch block unless ResetAbort is called. ResetAbort Annulla la richiesta di interruzione e impedisce al ThreadAbortException di terminare il thread.ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. I blocchi finally non eseguiti vengono eseguiti prima che il thread venga interrotto.Unexecuted finally blocks are executed before the thread is aborted.

Nota

Quando un thread chiama Abort su se stesso, l'effetto è simile alla generazione di un'eccezione. il ThreadAbortException si verifica immediatamente e il risultato è prevedibile.When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. Tuttavia, se un thread chiama Abort su un altro thread, Interrompi interrompe il codice in esecuzione.However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. Esiste la possibilità che un costruttore statico venga interrotto.There is a chance that a static constructor could be aborted. In rari casi, questo potrebbe impedire la creazione di istanze di tale classe in tale dominio applicazione.In rare cases, this might prevent instances of that class from being created in that application domain. Nelle versioni .NET Framework 1,0 e 1,1 è possibile che il thread venga interrotto mentre è in esecuzione un blocco finally, nel qual caso il blocco finally viene interrotto.In the .NET Framework versions 1.0 and 1.1, there is a chance the thread could abort while a finally block is running, in which case the finally block is aborted.

Non è garantito che il thread venga interrotto immediatamente o.The thread is not guaranteed to abort immediately, or at all. Questa situazione può verificarsi se un thread esegue una quantità illimitata di calcoli nei blocchi finally chiamati come parte della procedura di interruzione, ritardando pertanto l'interruzione.This situation can occur if a thread does an unbounded amount of computation in the finally blocks that are called as part of the abort procedure, thereby indefinitely delaying the abort. Per attendere fino a quando un thread non è stato interrotto, è possibile chiamare il metodo Join sul thread dopo aver chiamato il metodo Abort, ma non è garantito che l'attesa venga terminata.To wait until a thread has aborted, you can call the Join method on the thread after calling the Abort method, but there is no guarantee that the wait will end.

Nota

Il thread che chiama Abort potrebbe bloccarsi se il thread che viene interrotto si trova in un'area protetta di codice, ad esempio un blocco catch, un blocco finally o un'area di esecuzione vincolata.The thread that calls Abort might block if the thread that is being aborted is in a protected region of code, such as a catch block, finally block, or constrained execution region. Se il thread che chiama Abort include un blocco richiesto dal thread interrotto, è possibile che si verifichi un deadlock.If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

Se Abort viene chiamato su un thread che non è stato avviato, il thread verrà interrotto quando viene chiamato Start.If Abort is called on a thread that has not been started, the thread will abort when Start is called. Se Abort viene chiamato su un thread bloccato o in sospensione, il thread viene interrotto e quindi interrotto.If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

Se Abort viene chiamato su un thread che è stato sospeso, viene generata un'ThreadStateException nel thread che ha chiamato Abort e viene aggiunto AbortRequested alla proprietà ThreadState del thread interrotto.If Abort is called on a thread that has been suspended, a ThreadStateException is thrown in the thread that called Abort, and AbortRequested is added to the ThreadState property of the thread being aborted. Un ThreadAbortException non viene generato nel thread sospeso fino a quando non viene chiamato Resume.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

Se Abort viene chiamato su un thread gestito durante l'esecuzione di codice non gestito, un ThreadAbortException non viene generato finché il thread non torna al codice gestito.If Abort is called on a managed thread while it is executing unmanaged code, a ThreadAbortException is not thrown until the thread returns to managed code.

Se due chiamate a Abort provengono allo stesso tempo, è possibile che una chiamata imposti le informazioni sullo stato e l'altra chiamata per eseguire il Abort.If two calls to Abort come at the same time, it is possible for one call to set the state information and the other call to execute the Abort. Tuttavia, un'applicazione non è in grado di rilevare questa situazione.However, an application cannot detect this situation.

Dopo che Abort viene richiamato su un thread, lo stato del thread include AbortRequested.After Abort is invoked on a thread, the state of the thread includes AbortRequested. Dopo che il thread è stato terminato in seguito a una chiamata riuscita a Abort, lo stato del thread viene modificato in Stopped.After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. Con autorizzazioni sufficienti, un thread che è la destinazione di un Abort può annullare l'interruzione usando il metodo ResetAbort.With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. Per un esempio in cui viene illustrata la chiamata al metodo ResetAbort, vedere la classe ThreadAbortException.For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

Sicurezza

SecurityPermission
per operazioni avanzate sui thread.for advanced operations on threads. Enumerazione associata: ControlThread.Associated enumeration: ControlThread.

Vedi anche

Si applica a