質問
私はいくつかのマルチスレッドを行っており、AutoreseTeventsを使用しており、ManualReseTeventsは私のメインループを制御します。スレッドを「destryoing」するとき、私もこれらの信号を処分する必要がありますが、それは明らかです。
しかし、私はウェイトハンドルを処分する方法をさまざまな方法で見ましたが、どちらが正しいかわかりません。
バージョン1
if (disposing)
{
this.threadExitEvent.SafeWaitHandle.Dispose();
this.threadExitEvent.Close();
this.threadExitEvent = null;
....
}
バージョン2
if (disposing)
{
this.threadExitEvent.Close();
this.threadExitEvent = null;
....
}
バージョン3
if (disposing)
{
this.threadExitEvent.Close();
....
}
解決
バージョン2は私が一緒に行くものです。 WaitHandle
, 、だからそれを設定します null
良い考えです。これにより、オブジェクトを処分から回復できるようにすることが容易になります。 WaitHandle
もしそうなら、それを再現してください。
そうは言っても、オプション3を使用するために誰もあなたの手を平手打ちするつもりはありません。
オプション1を使用しないでください。一般的に、オブジェクトの「内部に到達」してメンバーの処分を開始することは悪い考えです。電話 Close
(以来 Dispose
からの方法 IDisposable
明示的に実装されており、同一のコードがあります Close
)自動的に処分を処理します SafeWaitHandle
. 。自分でそれをしないでください。
所属していません StackOverflow