スレッドの状態を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 WaitSleepJoin 中断
- を
- 背景
- 未開始
- をSuspendRequested私は今それが
Running
がIsAlive
と同じではありません明らかだと思う
をAbortRequested
IsAliveは、スレッドを開始するときに最も役立ちます。 if(!thread.IsAlive)thread.Start(); NOT STARTEDとSTARTEDの間にRUNNINGと等しくない多くの状態があるため、スレッドが実行中かどうかを確認する安全な方法ではありません。 IsAliveは実際にあなたに再びそれを開始しようとしないよう伝えます。 – kingdango
スレッドが終了していないことを定期的に確認するのは安全な方法ですか? –
一時停止は有効なスレッド状態ではなくなりました。誰も代替をお勧めすることができますか? – user2924019
@daveL:私はそれがこのように振る舞うようだと言っても嫌いです。しかし、問題は私のデスクトップ上でそのスレッド上で実行されているフォームを見ることができますが、thread.isaliveコードは実行されていないということです。 –
@daveLのように思えますが、曖昧さを扱うのは難しいですが、少なくともそれはそうですね...:p – kingdango