在我的 C# 项目中,我有一个跟踪一些文本框的静态类。需要从列表中删除文本框以防止内存泄漏。
我有一个静态函数可以将文本框添加到列表中:
public static void Add(TextBox tb)
{
tb.HandleCreated += new EventHandler(TextBoxHandleCreated);
}
static void TextBoxHandleCreated(object sender, EventArgs e)
{
TextBox tb = sender as TextBox;
tb.HandleDestroyed += new EventHandler(OnHandleDestroyed);
tbList.Add(tb);
}
static void OnHandleDestroyed(object sender, EventArgs e)
{
// Remove it
Remove(sender as Control);
}
我从UserControl
我的Form
. 在我调用的删除函数中,c.HandleDestroyed -= OnHandleDestroyed;
因此我不会使控件保持活动状态。
该Remove
函数是一个简单的循环检查和删除:
public static void Remove(Control c)
{
foreach (Control cl in cList)
{
if (c.Equals(cl))
{
c.HandleDestroyed -= OnHandleDestroyed;
cList.Remove(cl);
//break;
}
}
}
问题是,当我的对话框显示然后销毁时,我希望创建的和销毁的匹配,但事实并非如此。我得到的创造多于毁灭。
为什么呢?