C# 阻止窗体关闭,然后堆栈溢出

C# 阻止窗体关闭,然后堆栈溢出,c#,C#,我试图通过处理表单关闭来阻止表单关闭 if(e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; SomeFunction(); } 但是,当它进入SomeFunction()时,会引发stackoverflow异常。 这可能是什么原因?谢谢 编辑: 糟糕的是,我没有调试。SomeFunction()中有一些字段验证,当字段有效时,我调用表单的Close()函数。由于我对FormClosing()进行了处理,

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

if(e.CloseReason == CloseReason.UserClosing)
{
    e.Cancel = true;
    SomeFunction();
}
但是,当它进入SomeFunction()时,会引发stackoverflow异常。 这可能是什么原因?谢谢


编辑:


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

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

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


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

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