私は抽象クラスを持っていて、そのコンストラクタ内に無限ループスレッドを生成しています。クラスの使用が終了したときにこのスレッドが中止されるようにするにはどうすればよいでしょうか?C#:スレッドを正しく解放する
IDisposableを実装する必要がありますか?単にこれを使用しますか?
public void Dispose()
{
this.myThread.Abort();
}
私はAbort()が悪であることを読みました。 Dispose()はスレッドがtrueをチェックしてループを終了するためのプライベートブールフラグを設定する必要がありますか?スレッドのループで
public void Dispose()
{
this.abort = true;
}
// ...
if (this.abort)
{
break;
}
は、代わりにBackgroundWorkerのクラスを使用しますか?
C#はこのようなフラグのためのメモリバリアを必要としませんか? – bdonlan
です。あなたは "揮発性"キーワードを使用する必要があります。下の私のポストを参照してください。 –
実際には、フラグ値は最終的には揮発性なしでも(少なくともx86とx64では)表示されます。時間がかかることがありますが(数ミリ秒)、表示されます。理論的には、スコットはそうです、実際にはここでは揮発性が使われるべきです。 –