.net中Form的生命周期?
在下面的代码中,            
                                              private      void      button1_Click(object      sender,      EventArgs      e)       
                                              {       
                                                                      MyForm      myForm      =      new      MyForm();       
                                                                      myForm.Show();       
                                              }                                    
                      一般来说,myForm这个对象在button1_Click方法结束后,生命周期便结束,将会被GC清除。但是实际上myForm对应的窗口如果不按右上角“关闭按钮”是不会被GC清除的。为什么GC会对myForm“另眼相看”呢?            
                      对C#和GC理解有限,请各位大侠出手释惑!
------解决方案--------------------不太同意楼上关于类似c++的指针的比方 
 winform 背后应该关联于真实的windows窗口,可以从from.Handler属性看出 
 他不能被垃圾回收类似于sqlconnection 它关联于一个非托管的资源。或者说它不是纯粹的.net类。
------解决方案--------------------myForm.Show();  //关键应该是这句吧 
 虽然不太了解,但如果不show 退出方法后是会被回收的 
 show出之后是不是就进入了 另外一个相对的进程啊?这个进程消亡之前是不会被回收的(界面?)
------解决方案--------------------Show的时候,对象实体又没消亡, 点关闭的时候执行了 dispose方法的呀
------解决方案--------------------Reflector很快就找到了:   
 当对Form调用Show方法时,会设置其Visible属性为true,而在Visible属性的set方法中,调用SetVisibleCore方法,这个方法被Form重写,代码如下:   
 [EditorBrowsable(EditorBrowsableState.Advanced)] 
 protected override void SetVisibleCore(bool value) 
 { 
     if ((this.GetVisibleCore() != value) || (this.dialogResult != DialogResult.OK)) 
     {//这里应该是判断Visible是否发生改变或者dialogResult是不是OK 
         if ((this.GetVisibleCore() == value) && (!value || this.CalledMakeVisible)) 
         {//这里进一步的确认Visible没有发生改变(注意上面的if,其实这个分支的第一个判断就是判断dialogResult是不是OK,如果dislogResault不是OK,那么这里的this.GetVisibleCore() == value与上面的条件互斥),并且visible被设为false或者自己的CalledMakeVisible属性为true。 
             base.SetVisibleCore(value); 
         } 
         else 
         {//换言之,这里是this.GetVisibleCore()发生了改变的分支 
             if (value)//如果Visible被设置为true 
             { 
                 this.CalledMakeVisible = true; 
                 if (this.CalledCreateControl) 
                 { 
                     if (this.CalledOnLoad) 
                     { 
                         if (!Application.OpenFormsInternal.Contains(this)) 
                         { 
                             Application.OpenFormsInternalAdd(this);//关键在这里,真相大白 
                         } 
                     } 
                     else 
                     { 
                         this.CalledOnLoad = true; 
                         this.OnLoad(EventArgs.Empty); 
                         if (this.dialogResult != DialogResult.None) 
                         { 
                             value = false; 
                         } 
                     } 
                 } 
             } 
             else 
             {