C# 窗口关闭后问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 19:58:28
Form2 f2 = new Form2();
当f2关闭时,那f2的引用是什么?
为什么当关闭f3时,再点就弹不出f3了,关闭f3后,f3将引用什么?关闭不是销毁这个对象了吗,为什么不变成null?不要叫我在f3的FormClosed事件里加f3=null;这个我知道,我问的不是这个问题,我问的是当关闭f3时,对象被销毁了,f3为什么不变成null
private Form3 f3;
private void button1_Click(object sender, EventArgs e)
{
if (f3 == null)
{
f3 = new Form3();
f3.Show();
}
}
按照你的代码会提示:无法访问已释放的对象

这有是什么意思,释放和销毁有什么区别?

窗体关闭后,关闭在该对象内创建的所有资源并且释放该窗体。通过处理 Closing 事件,并设置作为参数传递给事件处理程序的 CancelEventArgs 的 Cancel 属性,可以防止在运行时关闭窗体。如果要关闭的窗体是应用程序的启动窗体,则该应用程序结束。

Close 时不释放窗体的一种情况是,窗体属于多文档界面 (MDI) 应用程序的一部分且是不可见的。在这种情况下,您需要手动调用 Dispose,将窗体的所有控件都标记为进行垃圾回收。

为什么没有释放窗体,.NET并不是马上释放,除非你手动调用 Dispose,要不要等GC来进行释放,当执行Close后,对像引用减少1,GC发现引用为0时,执行Dispose

如果GC认为引用数不为0,所以就暂时不会释放(销毁)在内存中,

f3关闭了,但对象没有销毁,只不过窗口不显示了而已。

if (f3 == null)
{
f3 = new Form3();
}
f3.Show();