質問

私はいくつかのマルチスレッドを行っており、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. 。自分でそれをしないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top