이 설명서는 보관되지만 유지 되지 않습니다.

Thread.Abort 메서드 (Object)

이 메서드가 호출되는 스레드에서 ThreadAbortException을 발생시켜 스레드 종료 프로세스를 시작하고, 스레드 종료에 대한 예외 정보를 제공합니다. 이 메서드를 호출하면 대개 스레드가 종료됩니다.

네임스페이스: System.Threading
어셈블리: mscorlib(mscorlib.dll)

public void Abort (
	Object stateInfo
)
public void Abort (
	Object stateInfo
)
public function Abort (
	stateInfo : Object
)

매개 변수

stateInfo

상태와 같이 중단 중인 스레드에서 사용할 수 있는 응용 프로그램 관련 정보를 포함하는 개체입니다.

예외 형식조건

SecurityException

호출자에게 필요한 권한이 없는 경우

ThreadStateException

중단 중인 스레드가 현재 일시 중단된 경우

스레드에 대해 이 메서드가 호출되면 시스템은 중단할 스레드에서 ThreadAbortException을 throw합니다. ThreadAbortException은 응용 프로그램 코드에 의해 catch될 수 있는 특수한 예외이지만 ResetAbort가 호출되지 않는 한, catch 블록의 끝에서 다시 throw됩니다. ResetAbort는 중단 요청을 취소하고 ThreadAbortException으로 인해 스레드가 종료되지 않도록 합니다. 실행되지 않은 finally 블록은 스레드가 중단되기 전에 실행됩니다.

Note참고

스레드가 자기 자신에 대해 Abort를 호출하면 예외를 throw할 때와 비슷한 결과가 나타납니다. 즉, ThreadAbortException이 즉시 발생되고 예측 가능한 결과가 발생합니다. 그러나 한 스레드가 다른 스레드에 대해 Abort를 호출하면 코드 실행이 중단됩니다. 정적 생성자를 중단할 수도 있습니다. 드문 경우지만 이로 인해 해당 클래스의 인스턴스가 응용 프로그램 도메인에서 만들어지지 못할 수 있습니다. .NET Framework 버전 1.0 및 1.1에서는 finally 블록이 실행되는 동안 스레드가 중단될 수 있으며 이 경우 finally 블록이 중단됩니다.

스레드는 즉시 중단될 수도 있고 중단되지 않을 수도 있습니다. 이러한 상황은 스레드가 중단 프로시저의 일부로 호출된 finally 블록에서 제한 없는 계산 작업을 수행하게 되어 중단이 무한정 지연되는 경우에 발생할 수 있습니다. 스레드가 중단될 때까지 기다리려는 경우 Abort 메서드를 호출한 후에 스레드에 대해 Join 메서드를 호출할 수 있지만 대기가 끝난다는 보장은 없습니다.

시작되지 않은 스레드에 대해 Abort를 호출하면 해당 스레드는 Start가 호출될 때 중단됩니다. 차단되었거나 대기 중인 스레드에 대해 Abort를 호출하면 스레드는 완전히 중단됩니다.

일시 중단된 스레드에 대해 Abort가 호출되면 Abort를 호출한 스레드에서 ThreadStateException이 throw되고 중단 중인 스레드의 ThreadState 속성에 AbortRequested가 추가됩니다. Resume이 호출될 때까지 일시 중단된 스레드에서 ThreadAbortException이 throw됩니다.

비관리 코드를 실행하는 동안 스레드가 ThreadAbortException을 무시하는 경우 스레드가 관리 코드의 실행을 시작할 때 시스템은 ThreadAbortException을 다시 throw합니다.

동시에 Abort를 두 번 호출하면 한 번의 호출로 상태 정보가 설정되고 다른 호출로 Abort가 실행될 수 있습니다. 그러나 응용 프로그램은 이 과정을 구분할 수 없습니다.

스레드에 대해 Abort를 호출하면 스레드의 상태에는 AbortRequested가 포함됩니다. Abort의 성공적인 호출의 결과로 스레드가 종료되면 스레드의 상태가 Stopped로 변경됩니다. 충분한 권한이 있는 경우 Abort의 대상이 되는 스레드는 ResetAbort 메서드를 사용하여 중단을 취소할 수 있습니다. ResetAbort 메서드 호출을 보여 주는 예제를 보려면 ThreadAbortException 클래스를 참조하십시오.

다음 코드 예제에서는 중단되는 스레드에 정보를 전달하는 방법을 보여 줍니다.

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);
        }
    }
}

import System.*;
import System.Threading.*;
import System.Threading.Thread;    

class Test
{
    public static void main(String[] args)
    {
        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.");
    } //main

    static void TestMethod()
    {
        try {
            while (true) {
                Console.WriteLine("New thread running.");
                Thread.Sleep(1000);
            }
        }
        catch (ThreadAbortException abortException) {
            Console.WriteLine((System.String)(abortException.
                get_ExceptionState()));
        }
    } //TestMethod
} //Test

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0에서 지원
표시: