【问题标题】:prevented closing of form then stackoverflow防止关闭表单然后stackoverflow
【发布时间】:2013-01-30 01:37:22
【问题描述】:

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

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

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


编辑:

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

【问题讨论】:

  • 取决于 SomeFunction() 正在做什么。我会使用调试器看看发生了什么。
  • 检查调用堆栈以了解导致堆栈溢出的路径。
  • 您可能有一个属性设置/getter 引用自身。例如public Object SomeProperty { get { return this.SomeProperty; } }
  • 糟糕,我没有调试。 SomeFunction() 中有一些字段验证,当字段有效时,我调用表单的 Close() 函数。由于我对 FormClosing() 进行了处理,因此它将在 SomeFunction() 中再次处理。不知道调用Close()函数也在CloseReason.UserClosing下。感谢您的回答。
  • 将这个函数的内容添加到您的问题中可能是一个想法。

标签: c#


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多