2013-04-26 12 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 WaitSleepJoin
  • 中断
  • 背景
  • 未開始
  • をSuspendRequested私は今それがRunningIsAlive

    と同じではありません明らかだと思う

をAbortRequested

+2

IsAliveは、スレッドを開始するときに最も役立ちます。 if(!thread.IsAlive)thread.Start(); NOT STARTEDとSTARTEDの間にRUNNINGと等しくない多くの状態があるため、スレッドが実行中かどうかを確認する安全な方法ではありません。 IsAliveは実際にあなたに再びそれを開始しようとしないよう伝えます。 – kingdango

+3

スレッドが終了していないことを定期的に確認するのは安全な方法ですか? –

+0

一時停止は有効なスレッド状態ではなくなりました。誰も代替をお勧めすることができますか? – user2924019