C# NET framework是否会在用户关闭表单之前释放对象

C# NET framework是否会在用户关闭表单之前释放对象,c#,winforms,C#,Winforms,这样创建和显示表单可以吗 private void settingsButton_Click(object sender, EventArgs e) { var settingsForm = new SettingsForm(); settingsForm.Show(); } NET framework是否会在用户关闭表单之前释放此对象 提前感谢。当settingsButton\u单击退出时,对settingsForm的所有引用都将丢失,但由于settingsForm本身尚未关

这样创建和显示表单可以吗

private void settingsButton_Click(object sender, EventArgs e)
{
    var settingsForm = new SettingsForm();
    settingsForm.Show();
}
NET framework是否会在用户关闭表单之前释放此对象


提前感谢。

当settingsButton\u单击退出时,对settingsForm的所有引用都将丢失,但由于settingsForm本身尚未关闭,垃圾收集器不会清理它,至少在settingsForm对象关闭之前是这样。以这种方式编写代码是可以的,但您也应该小心,因为应用程序本身可能会关闭,但设置表单会挂起(防止应用程序完全关闭)

它只有在不再使用时才会被释放,但是设置窗体听起来应该是模态的(
ShowDialog
)是的,它可以;不,不会的,我不知道内部的工作原理,但必须有一个对象在窗体打开时保存对窗体的引用。好吧,你可以自己解释清楚。NET在用户仍与它交互时收集对象将产生惊人的效果。控件对象(如窗体)由Winforms维护的内部表引用。在处理之前,它不会从表中移除。在您或用户关闭窗口之前,它不会被处理。该表有一个后门,Control.FromHandle()使用它。@HansPassant您知道在引用源中发生这种情况的位置吗?我试图查找它来回答这个问题,但找不到内部表插入的位置。编辑:没关系,找到了
NativeWindow.AddWindowToTable(
(函数
NativeWindow.AssignHandle(
调用它)