C# 单击红色的close(x)按钮和调用.close()有什么区别?

C# 单击红色的close(x)按钮和调用.close()有什么区别?,c#,winforms,C#,Winforms,我有一个winforms应用程序,在我的应用程序中,我创建了一个自定义表单。此自定义源在右上角具有默认的关闭、最小化和最大化按钮。如果我使用默认的红色x按钮关闭表单,它将正常关闭,没有问题。但是,如果我试图通过调用窗体上的.close来关闭窗体,它会抛出一个未处理的InvalidOperationException异常 调用.Close和单击该按钮之间有什么区别?为什么单击按钮可以正常工作,但调用.Close会引发异常?您可以使用工具->Spy++来记录窗口消息 发件人: Form.Close

我有一个winforms应用程序,在我的应用程序中,我创建了一个自定义表单。此自定义源在右上角具有默认的关闭、最小化和最大化按钮。如果我使用默认的红色x按钮关闭表单,它将正常关闭,没有问题。但是,如果我试图通过调用窗体上的.close来关闭窗体,它会抛出一个未处理的InvalidOperationException异常

调用.Close和单击该按钮之间有什么区别?为什么单击按钮可以正常工作,但调用.Close会引发异常?

您可以使用工具->Spy++来记录窗口消息

发件人:

Form.Close方法调用:

closeReason = CloseReason.UserClosing;
SendMessage(NativeMethods.WM_CLOSE, 0, 0);
此外,请尝试搜索异常消息:

找到了以下链接:


当您收到异常时,您可以很容易地看到堆栈跟踪。此信息对于理解导致异常的原因非常重要。你可以添加这些信息here@Steve没有堆栈跟踪。应用程序不会崩溃或引发异常。我知道它正在发生的唯一方式是因为输出显示了一行:System.Windows.Forms中发生了类型为“System.InvalidOperationException”的第一次意外异常。dll@Steve另外,我知道这是因为表单没有关闭。@TylerJones您可能正在抑制异常。在测试过程中是否有任何try/catch子句可以注释掉?可能有必要显示您的一些代码…@NathanA不,任何有问题的代码周围都没有try/catch。