2013-04-26 5 views
7

스레드 상태를 if(Thread.IsAlive)으로 확인하는 중입니다. 이 스레드에서 양식이 실행 중입니다. 실행 중 때때로 폼이 열려있는 상태에서도 Thread.IsAlive에 대한 호출이 false로 평가되는 것 같습니다. 나는 if(Thread.ThreadState==ThreadState.Running)와 동일한 검사를 수행 할 생각. 할 수있는 올바른 방법입니까? 그렇지 않다면 가능한 해결 방법은 무엇입니까?Thread.IsAlive 및 Thread.ThreadState == ThreadState.Running

+0

@daveL : 나는 이런 식으로 행동하는 것처럼 보일 때도 싫다. 하지만 문제는 내 바탕 화면에서 해당 스레드에서 실행중인 양식을 볼 수 있지만 thread.isalive 코드가 실행되지 않는 것입니다. –

+1

@daveL과 같이 보입니다. 모호성을 다루는 데 어려움이 있습니다. 적어도 그럴듯하게 보입니다. : p – kingdango

답변

11

msdn Thread.IsAlive 속성 이 스레드가 시작되었고 정상적으로 종료되지 않았거나 중단 된 경우 true입니다. 그렇지 않으면 false입니다.

msdn Thread.ThreadState


  • 스레드 실행은 차단되지 않으며, 시작되었으며, 대기중인 ThreadAbortException이 없다.
  • 배경
  • 시작되지 않음
  • WaitSleepJoin
  • 일시 중단
  • RunningIsAlive

    과 동일하지가 분명

내가 지금 생각을 AbortRequested SuspendRequested StopRequested

+2

IsAlive는 스레드를 시작할 때 주로 유용합니다. if (! thread.IsAlive) thread.Start(); RUNNING과 같지 않은 NOT STARTED와 STARTED 사이에 많은 상태가 있기 때문에 스레드가 실행 중인지 확인하는 것은 안전하지 않습니다. IsAlive는 실제로 다시 시작하려고하지 말라고 알려줍니다. – kingdango

+3

주기적으로 스레드가 종료되지 않았는지 확인하는 것이 안전한 방법입니까? –

+0

Suspended는 더 이상 유효한 스레드 상태로 보이지 않습니다. 누구든지 대안을 추천 할 수 있습니까? – user2924019