2013-04-26 9 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.
  • StopRequested
  • SuspendRequested
  • фон
  • Не начато
  • WaitSleepJoin
  • Подвесные
  • AbortRequested

Я думаю, что теперь это ясно Running не то же самое, как IsAlive

+2

IsAlive в основном полезен, когда вы начинаете тему. if (! thread.IsAlive) thread.Start(); Это не безопасный способ проверить, работает ли поток, потому что существует множество состояний между NOT STARTED и STARTED, которые не равны RUNNING. IsAlive действительно просто говорит вам не пытаться запустить его снова. – kingdango

+3

Безопасный ли способ периодически проверять, чтобы нить не выходила? –

+0

Suspended больше не является допустимым файловым контентом. Может ли кто-нибудь рекомендовать альтернативу? – user2924019