C# winform上的this.close调用之后的代码执行

C# winform上的this.close调用之后的代码执行,c#,.net,winforms,C#,.net,Winforms,在winform中,我有一个调用this.Close的方法,该方法中有一些代码行。既然该方法不是静态的,那么这些代码行是否一定会被执行呢?这些行不使用winform当前实例中的任何资源。您可以通过处理事件来做到这一点 从这里运行您需要的代码,它应该可以正常工作。简言之:否。如果保持原样,每次调用this后都会关闭。在Close命令从内存中删除紧跟其后的代码行之前,将进行一场竞赛,以查看是否可以执行这些代码行。最好在别处运行这些代码行。想想看,他们真的需要在关闭表单后执行吗?如果是这样,您可以将它

在winform中,我有一个调用this.Close的方法,该方法中有一些代码行。既然该方法不是静态的,那么这些代码行是否一定会被执行呢?这些行不使用winform当前实例中的任何资源。

您可以通过处理事件来做到这一点


从这里运行您需要的代码,它应该可以正常工作。

简言之:否。如果保持原样,每次调用
this后都会关闭
。在
Close
命令从内存中删除紧跟其后的代码行之前,将进行一场竞赛,以查看是否可以执行这些代码行。最好在别处运行这些代码行。想想看,他们真的需要在关闭表单后执行吗?如果是这样,您可以将它们放在另一个类中,或者放在
FormClosed
事件中,等等。

如果这是主窗体,由Program.cs调用,您可以将
this.Close()之后的代码行复制到Program.cs中

这看起来像:

...
Application.Run(new frmMain());
// Your code here
...

这是窗体的主体。关闭方法:

public void Close() {
  if (base.GetState(262144)) {
    throw new InvalidOperationException(SR.GetString("ClosingWhileCreatingHandle", new object[]       {
            "Close"
        }));
  }
  if (base.IsHandleCreated) {
    this.closeReason = CloseReason.UserClosing;
    base.SendMessage(16, 0, 0);
    return;
  }
  base.Dispose();
}

您可以看到,最后它正在处理表单本身,但它不是终止线程或类似的东西。因此,我的钱是这些行将始终执行(除非它们涉及可以在Form.Close()之后处理的成员字段)。但是有更优雅的方法来执行(请参阅其他答案)

“调用this.Close后,将进行一场竞赛,以确定在Close命令将紧跟其后的代码行从内存中删除之前是否可以执行这些代码行”-source?您不能在方法中设置
this=null
,也不能设置
Dispose()
不会使对象变得不可用,因此不管你对对象调用什么方法,对象在那之后仍然是活动的。@CodeCaster我只是假设会发生这种情况。至少根据我的经验,尝试从未打开的窗体调用任何对象都会导致各种问题,包括不调用所有对象,例如不可解释的错误、崩溃等。根据我的经验,表单类中调用
this.Close()
this.Dispose()
的方法将完美地运行到底。但是,您无法再访问表单的表单部分,因为它们在逻辑上会被破坏。然而,一个可行的解决方案并没有回答提出的问题。