c# - 防止关闭表单然后 stackoverflow

标签 c#

我试图通过处理 FormClosing 来阻止表单关闭。

if(e.CloseReason == CloseReason.UserClosing)
{
    e.Cancel = true;
    SomeFunction();
}

但是,当它进入 SomeFunction() 时,会抛出一个 stackoverflow 异常。 这可能是什么原因?谢谢。


编辑:

糟糕,我没有调试。 SomeFunction() 中有一些字段验证,当字段有效时,我调用表单的 Close() 函数。由于我对 FormClosing() 进行了处理,它将在 SomeFunction() 中再次进行。我不知道调用Close() 函数也在CloseReason.UserClosing 下。感谢您的回答。

最佳答案

堆栈溢出的一个常见原因是无限递归。

您应该检查 SomeFunction() 不会导致再次调用 SomeFunction()(可能通过触发您正在处理的事件。

您可以在调试器中检查调用堆栈,看看是否属于这种情况(根据上面的评论)。

关于c# - 防止关闭表单然后 stackoverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14595267/

相关文章:

c# - 从c#dll中读取方法

c# - 如何在Acumatica ERP系统中自定义屏幕AP Release All和AR Relase All

c# - Reactive Extensions 吞下在线程池线程上调用的 OnNext() 的异常?

c# - 错误提供者没有统一闪烁

c# - Directory.GetFiles 方法上的 searchPattern 逻辑

Unity 中的 C# 脚本打开 VS15 的新实例而不是添加到现有实例

c# - 遍历 MySQL 表

c# - nHibernate 中 Restrictions.Eq 的命名空间

c# - List<string> 简单分组和计数?

c# - 扫描条码 IDAutomationHC39M 后未获取值