다음을 통해 공유


ThreadState 열거형

정의

Thread의 실행 상태를 지정합니다.

이 열거형은 멤버 값의 비트 조합을 지원합니다.

public enum class ThreadState
[System.Flags]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadState
[System.Flags]
[System.Serializable]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum ThreadState
[<System.Flags>]
type ThreadState = 
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ThreadState = 
[<System.Flags>]
[<System.Serializable>]
type ThreadState = 
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type ThreadState = 
Public Enum ThreadState
상속
ThreadState
특성

필드

Aborted 256

스레드 상태에 AbortRequested가 포함되어 있고 스레드가 작동하지 않지만 상태가 아직 Stopped로 변경되지 않았습니다.

AbortRequested 128

스레드에 Abort(Object) 메서드가 호출되었지만 해당 스레드는 자신을 종결시키려는 보류된 ThreadAbortException을 받지 못했습니다.

Background 4

해당 스레드는 전경 스레드와 반대인 배경 스레드로 실행됩니다. 이 상태는 IsBackground 속성을 설정하여 제어합니다.

Running 0

스레드가 시작되었고 아직 중지되지 않았습니다.

Stopped 16

스레드가 중지되었습니다.

StopRequested 1

스레드를 중지하도록 요청했습니다. 이는 내부 전용입니다.

Suspended 64

스레드가 일시 중단되었습니다.

SuspendRequested 2

스레드를 일시 중단하도록 요청하고 있습니다.

Unstarted 8

스레드에 Start() 메서드가 호출되지 않았습니다.

WaitSleepJoin 32

스레드가 차단되었습니다. Sleep(Int32) 또는 Join()를 호출하거나, Enter(Object) 또는 Wait(Object, Int32, Boolean)를 호출하여 잠금을 허용하거나, ManualResetEvent와 같은 스레드 동기화 개체에서 대기하는 결과가 발생할 수 있습니다.

설명

열거형은 ThreadState 스레드에 대해 가능한 모든 실행 상태 집합을 정의합니다. 몇 가지 디버깅 시나리오에만 관심이 있습니다. 코드는 스레드 상태를 사용하여 스레드 활동을 동기화해서는 안 됩니다.

스레드가 만들어지면 종료될 때까지 상태 중 하나 이상에 있습니다. 공용 언어 런타임 내에서 생성된 스레드는 처음에는 Unstarted 상태에 있지만, 런타임에 들어오는 외부 또는 관리되지 않는 스레드는 이미 Running 상태에 있습니다. 스레드는 호출Thread.StartUnstarted 통해 상태에서 상태로 Running 전환됩니다. Unstarted 호출의 결과로 스레드가 Start상태를 벗어난 후에는 Unstarted 상태로 돌아갈 수 없습니다.

스레드는 지정된 시간에 둘 이상의 상태에 있을 수 있습니다. 예를 들어 호출 시 스레드가 차단되고 차단된 Monitor.Wait스레드에서 다른 스레드가 호출 Thread.Abort 되는 경우 차단된 스레드는 동시에 두 상태 모두 WaitSleepJoin AbortRequested 에 있습니다. 이 경우 스레드가 호출 Monitor.Wait 에서 반환되거나 중단 ThreadAbortException 되는 즉시 중단을 시작할 수 있습니다. 값의 ThreadState 모든 조합이 유효하지는 않습니다. 예를 들어 스레드는 상태와 Unstarted 상태에 모두 Aborted 있을 수 없습니다.

스레드는 Stopped 상태를 벗어날 수 없습니다.

중요

두 개의 스레드 상태 열거형이 있습니다. System.Threading.ThreadState System.Diagnostics.ThreadState

다음 표에서는 상태 변경을 일으키는 작업을 보여 줍니다.

작업 ThreadState
스레드는 공용 언어 런타임 내에 만들어집니다. Unstarted
다른 스레드는 새 스레드에서 Thread.Start 메서드를 호출하고 호출이 반환됩니다.

Start 새 스레드가 실행되기 시작할 때까지 메서드가 반환되지 않습니다. 호출하는 동안 새 스레드가 실행될 시점을 알 수 있는 Start방법은 없습니다.
Running
스레드 호출 Sleep WaitSleepJoin
스레드가 다른 개체에서 Monitor.Wait 를 호출합니다. WaitSleepJoin
스레드가 다른 스레드에서 Join 를 호출합니다. WaitSleepJoin
다른 스레드 호출 Interrupt Running
다른 스레드 호출 Suspend SuspendRequested
스레드가 Suspend 요청에 응답합니다. Suspended
다른 스레드 호출 Resume Running
다른 스레드 호출 Abort AbortRequested
스레드가 요청에 응답합니다 Abort . Stopped
스레드가 종료됩니다. Stopped

위에서 언급한 상태 외에도 스레드가 백그라운드에서 실행 중인지 전경에서 실행 중인지를 나타내는 상태도 Background 있습니다. 자세한 내용은 포그라운드 및 백그라운드 스레드를 참조하세요.

스레드의 속성은 Thread.ThreadState 스레드의 현재 상태를 제공합니다. 애플리케이션 스레드 실행 중인지 여부를 결정 하는 비트 마스크를 사용 해야 합니다. 값 Running 이 0이므로 다음 코드에서 스레드가 실행 중인지 테스트합니다.

(myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0
(myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0

적용 대상

추가 정보