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. 특히이를 호출 하 여 현재 스레드가 아닌 스레드를 중단 하는 경우이 throw 될 때 실행 된 코드 또는 실행에 실패 한 코드를 알 수 없습니다 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. 또한 응용 프로그램의 상태 또는 유지 관리를 담당 하는 응용 프로그램 및 사용자 상태를 확신할 수 없습니다.You also cannot be certain of the state of your application or any application and user state that it's responsible for preserving. 예를 들어를 호출 하면 Thread.Abort 정적 생성자 또는 관리 되지 않는 리소스의 해제가 실행 되지 않을 수 있습니다.For example, calling Thread.Abort may prevent the execution of static constructors or 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 5.0 이상 및 .NET Core: 모든 경우에 해당합니다..NET 5.0 and later and .NET Core: In all cases.

호출자에게 필요한 권한이 없는 경우The caller does not have the required permission.

중단 중인 스레드가 현재 일시 중단됩니다.The thread that is being aborted is currently suspended.

설명

이 메서드는 사용되지 않습니다.This method is obsolete. .NET 5.0 이상 버전에서이 메서드를 호출 하면 컴파일 타임 경고가 생성 됩니다.On .NET 5.0 and later versions, calling this method produces a compile-time warning. 이 메서드는 PlatformNotSupportedException 런타임에 .net 5.0 이상 및 .Net Core에서을 throw 합니다.This method throws a PlatformNotSupportedException at run time on .NET 5.0 and later and .NET Core.

스레드에 대해이 메서드를 호출 하면 시스템에서 스레드의를 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.

참고

스레드가 자체에서를 호출 하는 경우에는 예외를 throw 하는 것과 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 는 경우 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. 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.

추가 정보

적용 대상

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 5.0 이상 및 .NET Core: 모든 경우에 해당합니다..NET 5.0 and later and .NET Core: In all cases.

호출자에게 필요한 권한이 없는 경우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

설명

이 메서드는 사용되지 않습니다.This method is obsolete. .NET 5.0 이상 버전에서이 메서드를 호출 하면 컴파일 타임 경고가 생성 됩니다.On .NET 5.0 and later versions, calling this method produces a compile-time warning. 이 메서드는 PlatformNotSupportedException 런타임에 .net 5.0 이상 및 .Net Core에서을 throw 합니다.This method throws a PlatformNotSupportedException at run time on .NET 5.0 and later and .NET Core.

스레드에 대해이 메서드를 호출 하면 시스템에서 스레드의를 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.

참고

스레드가 자체에서를 호출 하는 경우에는 예외를 throw 하는 것과 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 는 경우 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. 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.

추가 정보

적용 대상