Я использую, чтобы проверить состояние потока с помощью if(Thread.IsAlive)
. В этом потоке запущена форма. Иногда во время выполнения, хотя форма остается открытой, вызов Thread.IsAlive, по-видимому, оценивается как false. Я решил выполнить ту же проверку с if(Thread.ThreadState==ThreadState.Running)
. Это правильный способ? Если нет, то какова возможная работа?Thread.IsAlive и Thread.ThreadState == ThreadState.Running
ответ
msdn Thread.IsAlive Свойство true, если эта нить была запущена и не прекратилась нормально или прервана; в противном случае - false.
msdn Thread.ThreadState
- Запуск
Резьба была запущена, она не блокируется, и нет в ожидании ThreadAbortException. - StopRequested
- SuspendRequested
- фон Не начато
- WaitSleepJoin
- Подвесные
- AbortRequested
Я думаю, что теперь это ясно Running
не то же самое, как IsAlive
IsAlive в основном полезен, когда вы начинаете тему. if (! thread.IsAlive) thread.Start(); Это не безопасный способ проверить, работает ли поток, потому что существует множество состояний между NOT STARTED и STARTED, которые не равны RUNNING. IsAlive действительно просто говорит вам не пытаться запустить его снова. – kingdango
Безопасный ли способ периодически проверять, чтобы нить не выходила? –
Suspended больше не является допустимым файловым контентом. Может ли кто-нибудь рекомендовать альтернативу? – user2924019
@daveL: даже я ненавижу его, когда говорю, что он ведет себя так. Но проблема в том, что я вижу форму, которая работает на этом потоке на моем рабочем столе, но код thread.isalive не выполняется. –
Кажется, что @daveL с трудом справляется с двусмысленностью, по крайней мере так кажется ...: p – kingdango