我已经完成了清理我公司正在使用的应用程序的任务。以前的开发人员不再在公司工作,我有一个问题。
以某种形式存在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)。
答案 0 :(得分:3)
表单即将关闭时会触发结束事件。您不必调用close方法,因为这是首先调用该事件的方法。
如果您希望表单关闭,根本不执行任何操作,因为它会在退出结束回拨时关闭。
如果要阻止它关闭,可以编写e.Cancel = True
,这将阻止表单关闭。
你的大学可能已经调用了close方法,因为它有一个重载版本,但在某些时候被删除了。或者也许他/她想要关闭另一种形式。 重要的是,在这种情况下你不需要来调用该方法。
答案 1 :(得分:0)
也许程序员不想关闭此表单。只需要在form form_closing中循环语句。 如果要关闭此表单只需删除或评论close()然后它将工作。 如果要将资源返回到计算机,则需要在此方法的末尾放置Dispose()。