2

在我的 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;
        }
    }
}

问题是,当我的对话框显示然后销毁时,我希望创建的和销毁的匹配,但事实并非如此。我得到的创造多于毁灭。

为什么呢?

4

0 回答 0