私はメモリリークを追跡しており、UserControlから派生したクラスに割り当てられているツールチップに絞っています。UserControlでツールチップのクリーンアップを自動化する方法
ツールチップがコントロールのコンストラクタに割り当てられ、このようなLoadイベントで初期化に割り当てられている:
public class CommonProfile : System.Windows.Forms.UserControl
{
private ToolTip toolTip1;
...
public CommonProfile()
{
InitializeComponent();
// Create the ToolTip and associate with the Form container.
toolTip1 = new ToolTip(this.components);
}
private void CommonProfile_Load(object sender, System.EventArgs e)
{
// Set up the delays for the ToolTip.
toolTip1.AutoPopDelay = 5000;
toolTip1.InitialDelay = 1000;
toolTip1.ReshowDelay = 500;
// Force the ToolTip text to be displayed whether or not the form is active.
toolTip1.ShowAlways = true;
// Set up the ToolTip text
toolTip1.SetToolTip(this.btnDeleteEntry, "Delete this Profile");
toolTip1.SetToolTip(this.lblProfileType, "Edit this Profile");
toolTip1.SetToolTip(this.lblProfileData, "Edit this Profile");
toolTip1.SetToolTip(this.picFlagForUpdate, "Toggle Flag for Update");
}
}
コントロールの親コントロールの有効期間を超える寿命を有します。このコントロールはオンザフライで作成され、パネルコントロールに追加された後、パネルコントロールから削除されます。
コントロールのDisposeメンバーが呼び出されていないことがわかりました。明らかに、ツールヒントへの参照が残っているためです。シャットダウンメソッドを呼び出す
public void Shutdown()
{
toolTip1.RemoveAll();
}
漏れがなくなり、処分が最終的に呼び出されます。
は、私はこのようなシャットダウン方法を追加しました。残念ながら、このソリューションでは、コントロールを使用している人は誰でも、終了時にShutdownメソッドを呼び出すように覚えておく必要があります。
シャットダウンメソッドを明示的に呼び出す必要がないように自動化できる方法があるかどうかを知りたいと思います。
私は、あなたのusercontrolを破棄するか、あなたのシャットダウンメソッドのような、あなたのためにそれを行うクリーンアップ機能を持つことができるかのいずれかでツールチップを呼ぶ必要があると思います。ここ – PRR
1.ルック[http://stackoverflow.com/questions/672980/dispose-on-user-controls-really-meant-to-edit-the-designer-cs-file][1] [1]:http://stackoverflow.com/questions/672980/dispose-on-user-controls-really-meant-to-edit-the-designer-cs-file – VMykyt