以下是问题:
Private void buttonFrmshow_Click(..)
{
frmEmployee f = new frmEmployee() //frmEmployee is derived from System.Windows.Form;
f.Show();
}
现在f是局部变量,其范围仅限于buttonclick方法, 1.尽管变量范围已经完成,为什么Employee表单始终处于活动状态? 2.会自动GC吗? 3.上面代码中的变量f显示为空,员工表单是否仍处于活动状态?幕后发生了什么?
它与线程有关吗?
答案 0 :(得分:1)
创建新表单时,会将它们添加到Application.OpenForms集合中,一旦局部变量超出范围,它们就会将它们保留在范围内。
关闭表单会将其从该集合中删除并允许其被收集。
答案 1 :(得分:0)
让我们做一件事。
只要引用引用类型对象(此处为Form),GC就永远不会触及它。删除引用后,只允许GC回收资源。
在实例化一个表单后,即使它处于空闲状态,也可以通过调用各种绘制方法来连续引用它。除非用户明确关闭,否则OS shell将继续占用Application主线程下的资源。