在Form.Closing中调用Form.Close

时间:2018-01-29 12:22:04

标签: c# .net forms winforms

我已经完成了清理我公司正在使用的应用程序的任务。以前的开发人员不再在公司工作,我有一个问题。

以某种形式存在Form.Closing方法。在此方法中,编写了一些自定义代码。此方法的最后一行是Close();调用。在寻找来源时,它会回到System.Windows.Forms.Form.Close

此代码示例如下所示:

private void Form1_Closing(object sender, CancelEventArgs e)
{

    // Some custom code here.

    Close();
}

调试时,当代码到达Close();时,它会跳回Form1_Closing方法。这将导致无休止的递归调用以堆栈溢出结束。现在,在Windows 7上,我有时会遇到堆栈溢出错误。在Windows 10上,这不会发生。有谁知道为什么我的老同事将Close电话放在Closing方法中?

如果需要更多信息,我会尝试提供。现在我只是将Close调用放在注释中,所有内容似乎都像以前一样工作,现在也没有在Windows 7上偶尔发生的错误(stackoverflows)。

2 个答案:

答案 0 :(得分:3)

表单即将关闭时会触发结束事件。您不必调用close方法,因为这是首先调用该事件的方法。

如果您希望表单关闭,根本不执行任何操作,因为它会在退出结束回拨时关闭。

如果要阻止它关闭,可以编写e.Cancel = True,这将阻止表单关闭。

你的大学可能已经调用了close方法,因为它有一个重载版本,但在某些时候被删除了。或者也许他/她想要关闭另一种形式。 重要的是,在这种情况下你不需要来调用该方法。

答案 1 :(得分:0)

也许程序员不想关闭此表单。只需要在form form_closing中循环语句。 如果要关闭此表单只需删除或评论close()然后它将工作。 如果要将资源返回到计算机,则需要在此方法的末尾放置Dispose()。