Thread.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()

이 메서드가 호출되는 스레드에서 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)

이 메서드가 호출되는 스레드에서 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

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를 throw 하 여 스레드를 중단 합니다.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를 호출 하는 경우 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. 스레드가 중단 될 때까지 기다리려면 Abort 메서드를 호출한 후 스레드에서 Join 메서드를 호출할 수 있지만 대기가 종료 되는 것은 아닙니다.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를 호출한 스레드에서 예외가 발생 하 고 중단 되는 스레드의 ThreadState 속성에 AbortRequested 추가 됩니다.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. Resume를 호출할 때까지 일시 중단 된 스레드에서 ThreadAbortException throw 되지 않습니다.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)

이 메서드가 호출되는 스레드에서 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

상태와 같이 중단 중인 스레드에서 사용할 수 있는 애플리케이션 관련 정보를 포함하는 개체입니다.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.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를 throw 하 여 스레드를 중단 합니다.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를 호출 하는 경우 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. 스레드가 중단 될 때까지 기다리려면 Abort 메서드를 호출한 후 스레드에서 Join 메서드를 호출할 수 있지만 대기가 종료 된다는 보장이 없습니다.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를 호출한 스레드에서 예외가 발생 하 고 중단 되는 스레드의 ThreadState 속성에 AbortRequested 추가 됩니다.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. Resume를 호출할 때까지 일시 중단 된 스레드에서 ThreadAbortException throw 되지 않습니다.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.

추가 정보

적용 대상