2

ユーザーコントロールがたくさんあり、それぞれが異なるメニュー選択で画面を埋めます。前のものをKILLしたい(メモリをクリアするため)、実行時にどれを知ることができないため、ハードコーディングできませんは、表示された前のコントロールでした。フォームからコントロールを削除するだけでは、 this.Controls.Remove('uc_foo')メモリが完全にクリアされません(taskmgrで確認しました)

foreach を使用してフォームのコントロールを反復し、適用するobject_reference = nullと、「foreach 反復変数であるため割り当てられません」というエラーが発生します。

読み取り専用のため、= null へのアクセスthis.Controls[i]は拒否されます

どうすればそれを取り除くことができますか?

更新フォームからコントロールを削除し、それへの他の参照がない場合、私が理解したことから、最終的にはメモリからクリアされますobject_reference = null。 taskmgr ですぐにメモリが削除されますが、ガベージ コレクションは適切な気分のときにそれを行います。

4

1 に答える 1

3

正しい。コントロールを削除しても、それは破棄されません。

試す

if (this.Controls.ContainsKey("uc_foo"))
  this.Controls["uc_foo"].Dispose();
于 2012-06-15T01:59:06.317 に答える