다음을 통해 공유


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
특성

필드

Name Description
Running 0

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

StopRequested 1

스레드를 중지하도록 요청되고 있습니다. 내부 전용입니다.

SuspendRequested 2

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

Background 4

스레드가 포그라운드 스레드가 아닌 백그라운드 스레드로 실행되고 있습니다. 이 상태는 속성을 설정하여 제어됩니다 IsBackground .

Unstarted 8

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

Stopped 16

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

WaitSleepJoin 32

스레드가 차단됩니다. 호출 Sleep(Int32) 또는 잠금 요청(예: 호출 Enter(Object) 또는 Join()Wait(Object, Int32, Boolean) 대기) 또는 스레드 동기화 개체(예: ManualResetEvent스레드 동기화 개체)의 결과일 수 있습니다.

Suspended 64

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

AbortRequested 128

Abort(Object) 스레드에서 메서드가 호출되었지만 스레드가 종료를 시도할 보류 중인 ThreadAbortException 메서드를 아직 받지 못했습니다.

Aborted 256

스레드 상태가 포함 AbortRequested 되고 스레드가 이제 중지되었지만 해당 상태는 아직 변경되지 Stopped않았습니다.

설명

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

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

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

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

중요합니다

두 개의 스레드 상태 열거형이 있습니다. System.Threading.ThreadStateSystem.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

적용 대상

추가 정보