所以,我有一个关于使用表单列表以及表单何时关闭的问题,要从C#中的列表中删除自己。我不认为垃圾收集器是自动执行的,对吧?
让我说我有:
List<SomeGraphForm> GraphGroup = new List<SomeGraphForm>();
....
添加表单...
GraphGroup.Add(x);
当x关闭时,从列表中删除它的最简洁方法是什么?使用FormClosed
事件是最好的方式(但我不确定如何将SomeGraphForm
项传递回其他类())。
答案 0 :(得分:2)
是的,GC无法收集仍然提到的内容。我会采用这种基本方法:
//code to create and add form
var form = new Form1();
form.FormClosed +=form_FormClosed;
_forms.Add(form);
form.Show();
//cleanup
private void form_FormClosed(object sender, FormClosedEventArgs e)
{
var closedForm = sender as Form1;
_forms.Remove(closedForm);
}
答案 1 :(得分:0)
如果您有一个用于从中派生所有表单的基类,则可以在OnClosed方法中取消注册。
protected override void OnClosed(EventArgs e)
{
// unregister here
}