当变量超出范围时,为什么表单对象仍然存在?

时间:2012-03-21 05:46:23

标签: c# .net winforms scope local-variables

以下是问题:

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显示为空,员工表单是否仍处于活动状态?幕后发生了什么?

它与线程有关吗?

2 个答案:

答案 0 :(得分:1)

创建新表单时,会将它们添加到Application.OpenForms集合中,一旦局部变量超出范围,它们就会将它们保留在范围内。

关闭表单会将其从该集合中删除并允许其被收集。

答案 1 :(得分:0)

让我们做一件事。

只要引用引用类型对象(此处为Form),GC就永远不会触及它。删除引用后,只允许GC回收资源。

在实例化一个表单后,即使它处于空闲状态,也可以通过调用各种绘制方法来连续引用它。除非用户明确关闭,否则OS shell将继续占用Application主线程下的资源。