C# HandleDestroyed和HandleCreated不匹配
在我的C#项目中,我有一个静态类,它跟踪一些文本框。需要从列表中删除文本框以防止内存泄漏 我有一个静态函数,可以向列表中添加一个文本框:C# HandleDestroyed和HandleCreated不匹配,c#,winforms,C#,Winforms,在我的C#项目中,我有一个静态类,它跟踪一些文本框。需要从列表中删除文本框以防止内存泄漏 我有一个静态函数,可以向列表中添加一个文本框: public static void Add(TextBox tb) { tb.HandleCreated += new EventHandler(TextBoxHandleCreated); } static void TextBoxHandleCreated(object sender, EventArgs e) { TextBox t
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);
}
我从我的表单
上的用户控件的构造函数中调用add函数。在remove函数中,我调用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;
}
}
}
问题是,当我的对话框显示并销毁时,我希望创建和销毁的对话框匹配,但事实并非如此。我创造的比破坏的多
为什么会这样?Remove方法看起来像什么?没有简单的解释,除了忘记显式处理对话框表单之外,这是一个非常常见的疏忽。或使用控件的对话框窗体代码。删除或删除控件。在不处理删除的控件的情况下清除,这是一个致命的疏忽。您的代码片段太不完整,无法尝试重现问题。使用调试器,你有对未被破坏的文本框的引用,所以找出它发生了什么。是的,我确实发现了一个可疑的控件。清除并修复了大部分内存泄漏。谢谢你的提示。