防止关闭表单然后堆栈溢出

本文关键字:然后 堆栈 栈溢出 表单 | 更新日期: 2023-09-27 17:56:31

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

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

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


编辑:

哎呀,我不调试不好。SomeFunction() 中有一些字段验证,当字段有效时,我调用表单的 Close() 函数。由于我在 FormClosesing() 上有处理权,它将在 SomeFunction() 中再次通过。我不知道调用 Close() 函数也在 CloseReason.UserClosing 下。感谢您的回答。

防止关闭表单然后堆栈溢出

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

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

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