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 throw 되 면 애플리케이션 상태의 특정 또는 모든 애플리케이션 및 사용자 상태에 사용할 수 없으며 유지 해야 합니다.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.

설명

이 메서드는 스레드에서 호출 되 면 시스템 throw를 ThreadAbortException 스레드에서 중단 합니다.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException 애플리케이션 코드에서 발견 될 수 있는 특별 한 예외는 이지만 끝날 때 다시 throw 합니다 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 효과 예외를 throw 비슷합니다를 자체적으로 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 호출한 스레드에서 throw 됩니다 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. A ThreadAbortException 될 때까지 일시 중단 된 스레드에서 throw 되지 않습니다 Resume 라고 합니다.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

하는 경우 Abort 비관리 코드를 실행 하는 동안 관리 되는 스레드에서 호출 되는 ThreadAbortException 스레드가 관리 코드로 반환 될 때까지 throw 되지 않습니다.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. 연관된 열거형: ControlThreadAssociated 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

설명

이 메서드는 스레드에서 호출 되 면 시스템 throw를 ThreadAbortException 스레드에서 중단 합니다.When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException 애플리케이션 코드에서 발견 될 수 있는 특별 한 예외는 이지만 끝날 때 다시 throw 합니다 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 효과 예외를 throw 비슷합니다를 자체적으로 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 호출한 스레드에서 throw 됩니다 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. A ThreadAbortException 될 때까지 일시 중단 된 스레드에서 throw 되지 않습니다 Resume 라고 합니다.A ThreadAbortException is not thrown in the suspended thread until Resume is called.

하는 경우 Abort 비관리 코드를 실행 하는 동안 관리 되는 스레드에서 호출 되는 ThreadAbortException 스레드가 관리 코드로 반환 될 때까지 throw 되지 않습니다.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. 연관된 열거형: ControlThreadAssociated enumeration: ControlThread.

추가 정보

적용 대상