Thread.Abort Thread.Abort Thread.Abort Thread.Abort Method

Определение

Вызывает исключение ThreadAbortException в вызвавшем его потоке для того, чтобы начать процесс завершения потока.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Вызов данного метода обычно завершает поток.Calling this method usually terminates the thread.

Перегрузки

Abort() Abort() Abort() Abort()

Вызывает исключение ThreadAbortException в вызвавшем его потоке для того, чтобы начать процесс завершения потока.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Вызов данного метода обычно завершает поток.Calling this method usually terminates the thread.

Abort(Object) Abort(Object) Abort(Object) Abort(Object)

Вызывает исключение ThreadAbortException в вызвавшем его потоке для того, чтобы начать процесс завершения потока, в то же время предоставляя сведения об исключении касательно исключения завершения потока.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. Вызов данного метода обычно завершает поток.Calling this method usually terminates the thread.

Комментарии

Важно!

Thread.Abort Метод должен использоваться с осторожностью.The Thread.Abort method should be used with caution. Особенно в том случае, если его вызвать прерывание потока, отличного от текущего потока, вы не знаете какой код выполнен или не удалось выполнить, когда ThreadAbortException возникает исключение, а также могут быть определенные состояния приложения или любого приложения и пользовательскими гласят, что ответственность за сохранение.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. Например, вызов Thread.Abort может помешать выполнению статических конструкторов или предотвращения освобождение неуправляемых ресурсов.For example, calling Thread.Abort may prevent static constructors from executing or prevent the release of unmanaged resources.

Обратите внимание, что Thread.Abort метод не поддерживается в .NET Core.Note that the Thread.Abort method is not supported on .NET Core.

Abort() Abort() Abort() Abort()

Вызывает исключение ThreadAbortException в вызвавшем его потоке для того, чтобы начать процесс завершения потока.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Вызов данного метода обычно завершает поток.Calling this method usually terminates the thread.

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

Исключения

Только в .NET Core: этот элемент не поддерживается..NET Core only: This member is not supported.

У вызывающего объекта отсутствует необходимое разрешение.The caller does not have the required permission.

Поток, который прерывается, в настоящий момент приостановлен.The thread that is being aborted is currently suspended.

Комментарии

Когда этот метод вызывается в потоке, система создает ThreadAbortException в потоке ее отмены.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException — Это специальное исключение, которое может быть перехвачено кодом приложения, но вызывается повторно в конце catch блокируется, пока 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 Отменяет запрос на отмену и предотвращает ThreadAbortException от завершения потока.ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. Невыполненные finally блоки выполняются в том случае, прежде чем поток прерван.Unexecuted finally blocks are executed before the thread is aborted.

Примечание

Если поток вызывает Abort для себя, аналогично вызову исключения; ThreadAbortException происходит немедленно, и результат является предсказуемым.When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. Тем не менее если один поток вызывает Abort в другом потоке, аварийное завершение прерывает любой выполняющийся код.However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. Также есть вероятность того, что статический конструктор может быть прервана.There is also a chance that a static constructor could be aborted. В редких случаях это может помешать экземпляры этого класса, создаваемых в этом домене приложения.In rare cases, this might prevent instances of that class from being created in that application domain. В .NET Framework версий 1.0 и 1.1, есть вероятность того, удалось прервать поток пока finally блок выполняется, в этом случае finally блок прерывается.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.

Не гарантируется, что поток прервется немедленно или вообще.The thread is not guaranteed to abort immediately, or at all. Эта ситуация может возникнуть, если поток выполняет неограниченное количество вычислений в finally блоки, которые вызываются как часть процедуры прерывания, тем самым неограниченное время задержки прерывания.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. Подождите, пока поток был прерван, можно последовательно вызвать методы Join метод в потоке после вызова метода Abort метод, но нет никакой гарантии, истекает время ожидания.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.

Примечание

Поток, вызывающий Abort может блокироваться, если поток, который прерывается, находится в защищенной области кода, таких как catch блока, finally блока или область ограниченного выполнения.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. Если на поток, который вызывает Abort удерживает блокировку, прерванным потоком, может возникнуть взаимоблокировка.If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

Если Abort вызывается в потоке, который не был запущен, поток будет прерван, когда Start вызывается.If Abort is called on a thread that has not been started, the thread will abort when Start is called. Если Abort вызывается в потоке, который заблокирован или в спящем режиме, поток прерван и затем прервана.If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

Если Abort вызывается в потоке, который был приостановлен, ThreadStateException создается в потоке, который вызвал Abort, и AbortRequested добавляется ThreadState свойство аварийно завершающимся потоком.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. Объект ThreadAbortException не будет создано в приостановленном потоке до Resume вызывается.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

Если Abort вызывается для управляемого потока при выполнении неуправляемого кода, ThreadAbortException не генерируется до возврата потока в управляемом коде.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.

Если два вызова к Abort поступать в то же время, это возможно для одного вызова задать сведения о состоянии и вызов на выполнение 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. Однако приложение не может определить ситуацию.However, an application cannot detect this situation.

После Abort вызывается в потоке, состояние потока включает в себя AbortRequested.After Abort is invoked on a thread, the state of the thread includes AbortRequested. После завершения потока в результате успешного вызова Abort, изменения состояния потока на Stopped.After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. С достаточными разрешениями поток, который является целевым объектом Abort можно отменить аварийное завершение, используя ResetAbort метод.With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. Пример, демонстрирующий вызов ResetAbort метод, см. в разделе ThreadAbortException класса.For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

Безопасность

SecurityPermission
для дополнительных операций в потоках.for advanced operations on threads. Связанное перечисление: ControlThread.Associated enumeration: ControlThread.

Дополнительно

Abort(Object) Abort(Object) Abort(Object) Abort(Object)

Вызывает исключение ThreadAbortException в вызвавшем его потоке для того, чтобы начать процесс завершения потока, в то же время предоставляя сведения об исключении касательно исключения завершения потока.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. Вызов данного метода обычно завершает поток.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)

Параметры

stateInfo
Object Object Object Object

Объект, который содержит информацию об определенном приложении, например состояние, которое может использоваться аварийно завершающимся потоком.An object that contains application-specific information, such as state, which can be used by the thread being aborted.

Исключения

Только в .NET Core: этот элемент не поддерживается..NET Core only: This member is not supported.

У вызывающего объекта отсутствует необходимое разрешение.The caller does not have the required permission.

Поток, который прерывается, в настоящий момент приостановлен.The thread that is being aborted is currently suspended.

Примеры

В следующем примере кода показано, как осуществлять обмен информацией с потоком, который прерывается.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
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

Комментарии

Когда этот метод вызывается в потоке, система создает ThreadAbortException в потоке ее отмены.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException — Это специальное исключение, которое может быть перехвачено кодом приложения, но вызывается повторно в конце catch блокируется, пока 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 Отменяет запрос на отмену и предотвращает ThreadAbortException от завершения потока.ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. Невыполненные finally блоки выполняются в том случае, прежде чем поток прерван.Unexecuted finally blocks are executed before the thread is aborted.

Примечание

Если поток вызывает Abort для себя, аналогично вызову исключения; ThreadAbortException происходит немедленно, и результат является предсказуемым.When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. Тем не менее если один поток вызывает Abort в другом потоке, аварийное завершение прерывает любой выполняющийся код.However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. Есть вероятность того, что статический конструктор может быть прервана.There is a chance that a static constructor could be aborted. В редких случаях это может помешать экземпляры этого класса, создаваемых в этом домене приложения.In rare cases, this might prevent instances of that class from being created in that application domain. В .NET Framework версий 1.0 и 1.1, есть вероятность того, удалось прервать поток пока finally блок выполняется, в этом случае finally блок прерывается.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.

Не гарантируется, что поток прервется немедленно или вообще.The thread is not guaranteed to abort immediately, or at all. Эта ситуация может возникнуть, если поток выполняет неограниченное количество вычислений в finally блоки, которые вызываются как часть процедуры прерывания, тем самым неограниченное время задержки прерывания.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. Подождите, пока поток был прерван, можно последовательно вызвать методы Join метод в потоке после вызова метода Abort метод, но нет никакой гарантии, что время ожидания истекает.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.

Примечание

Поток, вызывающий Abort может блокироваться, если поток, который прерывается, находится в защищенной области кода, таких как catch блока, finally блока или область ограниченного выполнения.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. Если на поток, который вызывает Abort удерживает блокировку, прерванным потоком, может возникнуть взаимоблокировка.If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

Если Abort вызывается в потоке, который не был запущен, поток будет прерван, когда Start вызывается.If Abort is called on a thread that has not been started, the thread will abort when Start is called. Если Abort вызывается в потоке, который заблокирован или в спящем режиме, поток прерван и затем прервана.If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

Если Abort вызывается в потоке, который был приостановлен, ThreadStateException создается в потоке, который вызвал Abort, и AbortRequested добавляется ThreadState свойство аварийно завершающимся потоком.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. Объект ThreadAbortException не будет создано в приостановленном потоке до Resume вызывается.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

Если Abort вызывается для управляемого потока при выполнении неуправляемого кода, ThreadAbortException не генерируется до возврата потока в управляемом коде.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.

Если два вызова к Abort поступать в то же время, это возможно для одного вызова задать сведения о состоянии и вызов на выполнение 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. Однако приложение не может определить ситуацию.However, an application cannot detect this situation.

После Abort вызывается в потоке, состояние потока включает в себя AbortRequested.After Abort is invoked on a thread, the state of the thread includes AbortRequested. После завершения потока в результате успешного вызова Abort, изменения состояния потока на Stopped.After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. С достаточными разрешениями поток, который является целевым объектом Abort можно отменить аварийное завершение, используя ResetAbort метод.With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. Пример, демонстрирующий вызов ResetAbort метод, см. в разделе ThreadAbortException класса.For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

Безопасность

SecurityPermission
для дополнительных операций в потоках.for advanced operations on threads. Связанное перечисление: ControlThread.Associated enumeration: ControlThread.

Дополнительно

Применяется к