私はBackgroundWorkerのスレッドが生きていることを確認する方法を把握しようとしています(つまり、まだ実行中のスレッドは、本質的には、単純な無限ループとして実装されます。BackgroundWorkerのIsBusyは "IsAlive"と同じですか?
while (AllConditionsMet())
{
DoSomeMagic();
Thread.Sleep(10000);
}
がIsAlive()
に最も近いものは、私がこれまでに見つかりましたIsBusyプロパティがありますが、時間の私のスレッドスリープ()のほとんどは、私はこれが仕事をするかどうかを確認していないことを考えると
は私がやってIsBusyに数えることができます:。
if (!myWorker.IsBusy)
RestartWorker();
または私はトラブルを呼びかけていますか? docsから
isBusyがfalseの場合、Backgroundworkerは仕事をしていないので、表示されたコードを使用することで問題にはなりません。 "RestartWorker()"メソッドは、ワーカーが開始されていないため、間違っています。しかし、それはプログラミング上の問題よりも言語のことです。 – jAC
スレッド内にコードを実装して、それ自体を再起動すると問題が発生することがあります。あなたは失敗状態を検出し、スレッドを終了し、まったく新しいスレッドを再起動する方が良いでしょう。そうしないと、デッドロック状態になる可能性が非常に高くなります。 –