当前位置: 代码迷 >> C# >> 关于不同窗体间的传值有关问题
  详细解决方案

关于不同窗体间的传值有关问题

热度:131   发布时间:2016-05-05 05:02:51.0
关于不同窗体间的传值问题
我有两个窗体,Form1和Form2,Form2相当于一个设置框里面有个控件textbox,数据填完之后,Form2将要关闭,如何将文本框的文本传入Form1里的变量去啊,Form1有个string的变量
------解决思路----------------------
你在form1里执行
Form2 fm2=new Form2(),
那么在这个方法走完之前,fm2一直保持着对Form2这个类的强引用,所以即使窗体关闭了也不会立即销毁
------解决思路----------------------
引用:
Quote: 引用:

你在form1里执行
Form2 fm2=new Form2(),
那么在这个方法走完之前,fm2一直保持着对Form2这个类的强引用,所以即使窗体关闭了也不会立即销毁
这样的啊?

如果你使用show的方式打开窗体,那么代码不会阻塞,直接走完了,fm2会立即释放(窗体句柄),显示出来的窗体本身引用窗体类,那么窗体关闭了类也就释放了.
而如果你使用ShowDialog的方式打开窗体,代码会阻塞在这一句,直到窗体关闭,继续往下走.此时窗体本身已经不引用类(窗体释放了),而是fm2这个变量在引用类,这个方法走完,才会释放掉.
------解决思路----------------------
C#的GC垃圾收集器还是很智能的

int i = 2;如果你后面不用,过了这一句,i就被释放了

Form2 f2 = new Form2();就算你已经close了,如果后面有xx = f2.oo之类的语句,f2暂时就不会释放

但如果没有那些语句,f2当场就释放了
------解决思路----------------------
引用:
C#的GC垃圾收集器还是很智能的

int i = 2;如果你后面不用,过了这一句,i就被释放了

Form2 f2 = new Form2();就算你已经close了,如果后面有xx = f2.oo之类的语句,f2暂时就不会释放

但如果没有那些语句,f2当场就释放了

不会当场释放.从来没听说过GC会实时跟踪代码去释放资源的,那GC也太累了.
GC会每隔一定时间或当内存不足的时候去检查哪些变量已经没有引用,然后就去释放它.一般都会间隔3-5秒甚至更长的时间,而不会立即释放.
哪怕你手动执行了GC.Collect();也只是通知GC应该释放了,而不是让它立即释放.
  相关解决方案