【发布时间】: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#