A ThreadStateException発生しようとした場合に再スタースレッド
-
08-06-2019 - |
質問
時を取得します。Threading.ThreadStateExceptionをはじめようとする場合、再起動します。コードの問題として
// Make sure the thread is done stopping
while (this.mThread.ThreadState == ThreadState.Running)
{
Thread.Sleep(0);
}
// Respawn a thread if the current one is stopped or doesn't exist
if (this.mThread == null || this.mThread.ThreadState == ThreadState.Stopped)
{
this.mThread = new Thread(new ParameterizedThreadStart(Monitor)); }
// Start the thread
if (check)
{
this.mThread.Start(60000);
}
else
{
this.mThread.Start(0);
}
いつの質問はここにいることであるのを防ぐ誤差から発?
解決
問題は、できるコードを最初に確認になるような場合は新しいthreadオブジェクトは、別のコードを決定する天気のスレッドオブジェクトです。によるレースの条件とじゃないんですが、たとえば、コードが終わっ金がかかる場合があります。開始既存のスレッドオブジェクトです。えん募の詳細を背景に チェック 変動することはできないかもトリガーのこの行動です。
きの再編にコードです。開始しに確定するという新しいオブジェクト。でございますのでご注意下さい、Startメソッドを同じ場合は決算書の新しいthreadオブジェクトです。
個人的には、まろうとして再編成全体のコードではなかったを別のスレッドが、ラップ、コード内のスレッドオブジェクトの内部にループのスレッドだけを移すことになりました。
他のヒント
めることが可能で、スレッドに複数の状態を一度に従って、ThreadState性のあるビットマップが可能です。での試験と同等の一定の状態にないといった、すべてます。すことが必要なようなもの:
if((mThread.ThreadState & ThreadState.Running) != 0)
しかし、チェックのスレッドの状態は間違いあります。私はいないかどうかは分からないという名称を使うようになっそうなんでしょうねんが待っているスレッドを終了する前に再起動します。その場合を行うと良いでしょう:
mThread.Join();
mThread = new Thread(new ParameterizedThreadStart(Monitor));
if(check)
mThread.Start(60000);
else
mThread.Start(0);
ものの場合についてお聞かせください問題だと詳しいほぼ一定であります。待ってスレッドを終了で再起動して再度は言えませんが効率的だった。場合もあるでしょう必要な何らかのスレッド間のコミュニケーションとは何か
オープンする。
A ThreadStateExceptionがスローされますので使い始めるスレッドのないstartableます。最も蓋然性が高い状況にすることで走る、ことを完全に終了した.
す可能性があるカップルでも可能で起きています。最初は、スレッドが移行から走行へのStopRequestedではないが完全に停止し、自分の論理のない新しいスレッドということを始めスレッドが終了した走行、あるいは仕上がりを走(はが有効な状態で再起動).
その他の可能性のスレッドが中断されました。スレッドを中断、中止状態ではなく、停止状態では、コースも有効でないために電源を再投入してください。
本当に、どのスレッドが生存できる"再起動"するのを停止いたします。使ってこの条件ではなく:
if (this.mThread == null || this.mThread.ThreadState != ThreadState.Suspended)