Thread.Abort Metoda

Definice

Vyvolá ThreadAbortException ve vlákně, ve kterém je vyvoláno, pro zahájení procesu ukončení vlákna.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Volání této metody obvykle ukončí vlákno.Calling this method usually terminates the thread.

Přetížení

Abort()
Zastaralé.

Vyvolá ThreadAbortException ve vlákně, ve kterém je vyvoláno, pro zahájení procesu ukončení vlákna.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Volání této metody obvykle ukončí vlákno.Calling this method usually terminates the thread.

Abort(Object)
Zastaralé.

Vyvolá ThreadAbortException ve vlákně, ve kterém je vyvoláno, k zahájení procesu ukončení vlákna a zároveň poskytuje informace o výjimce týkající se ukončení vlákna.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. Volání této metody obvykle ukončí vlákno.Calling this method usually terminates the thread.

Poznámky

Důležité

Thread.AbortMetoda by měla být použita s opatrností.The Thread.Abort method should be used with caution. Zejména při volání metody, která přerušuje vlákno jiné než aktuální vlákno, nevíte, jaký kód byl proveden nebo se nepodařilo provést při ThreadAbortException vyvolání.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. Nemůžete se také stát určitým stavem aplikace nebo žádné aplikace a stavu uživatele, které zodpovídá za zachování.You also cannot be certain of the state of your application or any application and user state that it's responsible for preserving. Například volání Thread.Abort může zabránit spuštění statických konstruktorů nebo vydání nespravovaných prostředků.For example, calling Thread.Abort may prevent the execution of static constructors or the release of unmanaged resources.

Abort()

Upozornění

Thread.Abort is not supported and throws PlatformNotSupportedException.

Vyvolá ThreadAbortException ve vlákně, ve kterém je vyvoláno, pro zahájení procesu ukončení vlákna.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Volání této metody obvykle ukončí vlákno.Calling this method usually terminates the 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 ()
Atributy

Výjimky

.NET 5,0 a novější a .NET Core: ve všech případech..NET 5.0 and later and .NET Core: In all cases.

Volající nemá požadované oprávnění.The caller does not have the required permission.

Přerušené vlákno je aktuálně pozastavené.The thread that is being aborted is currently suspended.

Poznámky

Tato metoda je zastaralá.This method is obsolete. V rozhraní .NET 5,0 a novějších verzích volání této metody vytvoří upozornění v době kompilace.On .NET 5.0 and later versions, calling this method produces a compile-time warning. Tato metoda vyvolá PlatformNotSupportedException v době běhu rozhraní .net 5,0 a novější a .NET Core.This method throws a PlatformNotSupportedException at run time on .NET 5.0 and later and .NET Core.

Pokud je tato metoda vyvolána pro vlákno, systém vyvolá ThreadAbortException ve vlákně, aby ji přerušil.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException je speciální výjimka, která může být zachycena kódem aplikace, ale je znovu vyvolána na konci catch bloku, pokud ResetAbort není volána.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 zruší požadavek na přerušení a brání v ThreadAbortException ukončení vlákna.ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. Nespuštěné finally bloky se spustí před přerušením vlákna.Unexecuted finally blocks are executed before the thread is aborted.

Poznámka

Při volání Abort samotného vlákna je efekt podobný vyvolání výjimky. ThreadAbortException dojde k okamžitému a výsledek je předvídatelný.When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. Nicméně pokud jedno vlákno volá Abort jiné vlákno, přerušení přerušení bez ohledu na to, jestli je kód spuštěný.However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. Existuje také možnost přerušit statický konstruktor.There is also a chance that a static constructor could be aborted. Ve výjimečných případech to může zabránit v vytváření instancí této třídy v doméně aplikace.In rare cases, this might prevent instances of that class from being created in that application domain. V .NET Framework verzích 1,0 a 1,1 existuje možnost, že vlákno může být přerušeno během finally běhu bloku, v takovém případě finally je blok přerušen.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.

U vlákna není zaručeno přerušení okamžitě nebo vůbec.The thread is not guaranteed to abort immediately, or at all. K této situaci může dojít, pokud vlákno provádí neohraničené množství výpočtu v finally blocích, které jsou volány jako součást postupu přerušení, a tak neomezeně zpozdí přerušení.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. Chcete-li počkat na přerušení vlákna, můžete zavolat Join metodu ve vlákně po volání Abort metody, ale není zajištěna žádná záruka, že čekání skončí.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.

Poznámka

Vlákno, které volá, Abort může zablokovat, pokud je vlákno, které je přerušeno, v chráněné oblasti kódu, například catch blok, finally blok nebo omezení oblasti provádění.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. Pokud vlákno, které volá, Abort drží zámek, že přerušené vlákno vyžaduje, může dojít k zablokování.If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

Pokud Abort je volána ve vlákně, které nebylo spuštěno, vlákno bude při volání přerušeno Start .If Abort is called on a thread that has not been started, the thread will abort when Start is called. Pokud Abort je volána na vlákně, které je blokováno nebo je v režimu spánku, vlákno je přerušeno a poté přerušeno.If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

Pokud Abort je volána ve vlákně, které je pozastaveno, ThreadStateException je vyvolána ve vlákně, které je voláno, Abort a AbortRequested je přidána do vlastnosti vlákna, které je ThreadState přerušeno.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. A není ThreadAbortException vyvolána v pozastaveném vlákně, dokud Resume není voláno.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

Pokud Abort je volána ve spravovaném vlákně při provádění nespravovaného kódu, ThreadAbortException není vyvolána, dokud se vlákno nevrátí do spravovaného kódu.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.

Pokud dvě volání Abort ve stejnou dobu jsou k dispozici, je možné, že jedno volání nastaví stavové informace a druhé volání ke spuštění 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. Aplikace ale tuto situaci nerozpoznala.However, an application cannot detect this situation.

Po Abort vyvolání ve vlákně obsahuje stav vlákna AbortRequested .After Abort is invoked on a thread, the state of the thread includes AbortRequested. Po ukončení vlákna v důsledku úspěšného volání do se Abort stav vlákna změní na Stopped .After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. S dostatečnými oprávněními může vlákno, které je cílem, Abort Zrušit přerušení pomocí ResetAbort metody.With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. Příklad, který ukazuje volání ResetAbort metody, naleznete v tématu ThreadAbortException Třída.For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

Viz také

Platí pro

Abort(Object)

Upozornění

Thread.Abort is not supported and throws PlatformNotSupportedException.

Vyvolá ThreadAbortException ve vlákně, ve kterém je vyvoláno, k zahájení procesu ukončení vlákna a zároveň poskytuje informace o výjimce týkající se ukončení vlákna.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. Volání této metody obvykle ukončí vlákno.Calling this method usually terminates the 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)

Parametry

stateInfo
Object

Objekt, který obsahuje informace specifické pro aplikaci, jako je například stav, který může být použit pro přerušené vlákno.An object that contains application-specific information, such as state, which can be used by the thread being aborted.

Atributy

Výjimky

.NET 5,0 a novější a .NET Core: ve všech případech..NET 5.0 and later and .NET Core: In all cases.

Volající nemá požadované oprávnění.The caller does not have the required permission.

Přerušené vlákno je aktuálně pozastavené.The thread that is being aborted is currently suspended.

Příklady

Následující příklad kódu ukazuje, jak předat informace do vlákna, které je přerušeno.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

Poznámky

Tato metoda je zastaralá.This method is obsolete. V rozhraní .NET 5,0 a novějších verzích volání této metody vytvoří upozornění v době kompilace.On .NET 5.0 and later versions, calling this method produces a compile-time warning. Tato metoda vyvolá PlatformNotSupportedException v době běhu rozhraní .net 5,0 a novější a .NET Core.This method throws a PlatformNotSupportedException at run time on .NET 5.0 and later and .NET Core.

Pokud je tato metoda vyvolána pro vlákno, systém vyvolá ThreadAbortException ve vlákně, aby ji přerušil.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException je speciální výjimka, která může být zachycena kódem aplikace, ale je znovu vyvolána na konci catch bloku, pokud ResetAbort není volána.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 zruší požadavek na přerušení a brání v ThreadAbortException ukončení vlákna.ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. Nespuštěné finally bloky se spustí před přerušením vlákna.Unexecuted finally blocks are executed before the thread is aborted.

Poznámka

Při volání Abort samotného vlákna je efekt podobný vyvolání výjimky. ThreadAbortException dojde k okamžitému a výsledek je předvídatelný.When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. Nicméně pokud jedno vlákno volá Abort jiné vlákno, přerušení přerušení bez ohledu na to, jestli je kód spuštěný.However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. Existuje možnost, že statický konstruktor může být přerušen.There is a chance that a static constructor could be aborted. Ve výjimečných případech to může zabránit v vytváření instancí této třídy v doméně aplikace.In rare cases, this might prevent instances of that class from being created in that application domain. V .NET Framework verzích 1,0 a 1,1 existuje možnost, že vlákno může být přerušeno během finally běhu bloku, v takovém případě finally je blok přerušen.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.

U vlákna není zaručeno přerušení okamžitě nebo vůbec.The thread is not guaranteed to abort immediately, or at all. K této situaci může dojít, pokud vlákno provádí neohraničené množství výpočtu v finally blocích, které jsou volány jako součást postupu přerušení, a tak neomezeně zpozdí přerušení.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. Chcete-li počkat na přerušení vlákna, můžete zavolat Join metodu ve vlákně po volání Abort metody, ale není nijak zaručeno, že čekání skončí.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.

Poznámka

Vlákno, které volá, Abort může zablokovat, pokud je vlákno, které je přerušeno, v chráněné oblasti kódu, například catch blok, finally blok nebo omezení oblasti provádění.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. Pokud vlákno, které volá, Abort drží zámek, že přerušené vlákno vyžaduje, může dojít k zablokování.If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

Pokud Abort je volána ve vlákně, které nebylo spuštěno, vlákno bude při volání přerušeno Start .If Abort is called on a thread that has not been started, the thread will abort when Start is called. Pokud Abort je volána na vlákně, které je blokováno nebo je v režimu spánku, vlákno je přerušeno a poté přerušeno.If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

Pokud Abort je volána ve vlákně, které je pozastaveno, ThreadStateException je vyvolána ve vlákně, které je voláno, Abort a AbortRequested je přidána do vlastnosti vlákna, které je ThreadState přerušeno.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. A není ThreadAbortException vyvolána v pozastaveném vlákně, dokud Resume není voláno.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

Pokud Abort je volána ve spravovaném vlákně při provádění nespravovaného kódu, ThreadAbortException není vyvolána, dokud se vlákno nevrátí do spravovaného kódu.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.

Pokud dvě volání Abort ve stejnou dobu jsou k dispozici, je možné, že jedno volání nastaví stavové informace a druhé volání ke spuštění 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. Aplikace ale tuto situaci nerozpoznala.However, an application cannot detect this situation.

Po Abort vyvolání ve vlákně obsahuje stav vlákna AbortRequested .After Abort is invoked on a thread, the state of the thread includes AbortRequested. Po ukončení vlákna v důsledku úspěšného volání do se Abort stav vlákna změní na Stopped .After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. S dostatečnými oprávněními může vlákno, které je cílem, Abort Zrušit přerušení pomocí ResetAbort metody.With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. Příklad, který ukazuje volání ResetAbort metody, naleznete v tématu ThreadAbortException Třída.For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

Viz také

Platí pro