:子供とそれ自身を処分するのと同等のパネルを処分していますか?以下のクラス内
class MyPanel : Panel
{
...
protected override void Dispose(bool disposing)
{
// My code here
}
}
次の2個のコードサンプルが同等ですか?
if (disposing)
{
List<Control> ctrls = new List<Control>(this.Controls);
this.Controls.Clear();
foreach(Control c in ctrls)
{
c.Dispose();
}
}
base.Dispose(disposing);
対
base.Dispose(disposing);
それらが異なる効果を持っている場合、それは何でしょうか?
編集:それはその子(disposing
がtrueで、Controls
は2つのコントロールを含む)のいずれかを配置に到達する前にので、私はそれを最初の方法をやって、どんな理由であれ、これを聞いては、第二の方法のに対し、私のプログラムをフリーズ正常に動作します。私が喜んで2番目のものを使うことができれば、それは素晴らしいことです。
論理的には同じですが、通常は同じ結果になります。 Clear()コールはコントロールウィンドウをパーキングウィンドウに移動します。この(スレッディング)バグは、あなたの後端を別の方法でバイトすることになります。 –
@ジョー:私たちは同じことを話していると確信しています。子パネルがまだ実行中でイベントを生成している場合は、イベントハンドラがリークしていることは明らかです。つまり、2番目の方法が優れているわけではありません。つまり、オブジェクトを適切に管理する必要があるということです。 –
@Cody、あなたは正しいです。私はちょうど私が行っていたことは、プレゼンター(ビューごと)を繰り返して、それらを処分して、イベントハンドラを処分するというコードを見ている間に気づいた。私はすべてのボタンとテキストボックスをビューに表示しません。それは愚かなので、最初のコメントを取り消します。 btw、私はあなたの答えにコメントしたのと同じジョーではありません、それは詐欺師です! – Joe