14

I am using to check the condition of a thread with if(Thread.IsAlive). A form is running in this thread. At times during execution, even though the form remains open, the call to Thread.IsAlive seems to be evaluating to false. I thought to perform the same check with if(Thread.ThreadState==ThreadState.Running). Is it the right way to do? If not, what is the possible work around?

2
  • @daveL : even i hate it when i say it seems to behave like this. But the problem is that I can see the form that is running on that thread on my desktop, yet thread.isalive code is not getting executed. Commented Apr 26, 2013 at 13:07
  • 1
    Seems like @daveL has a hard time dealing with ambiguity, at least it seems that way... :p Commented Nov 22, 2013 at 15:00

1 Answer 1

18

msdn Thread.IsAlive Property true if this thread has been started and has not terminated normally or aborted; otherwise, false.

msdn Thread.ThreadState

  • Running
    The thread has been started, it is not blocked, and there is no pending ThreadAbortException.
  • StopRequested
  • SuspendRequested
  • Background
  • Unstarted
  • WaitSleepJoin
  • Suspended
  • AbortRequested

I think now it's clear Running is not the same as IsAlive

Sign up to request clarification or add additional context in comments.

3 Comments

IsAlive is mostly useful when you're starting a thread. if(!thread.IsAlive) thread.Start(); It's not a safe way to see if a thread is RUNNING because there are many states between NOT STARTED and STARTED that aren't equal to RUNNING. IsAlive really just tells you not to try to start it again.
Is it a safe way to periodically check to make sure the thread has not exited ?
Suspended no longer appears to be a valid threadstate. Can anyone recommend an alternative?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.