2

在 winform 中,我有一个调用的方法,this.Close并且在该方法中遵循了一些代码行。现在既然方法不是static,那么是否保证这些代码行会被执行?这些行不使用当前 winform 实例中的任何资源。

4

4 回答 4

1

您可以通过处理Form.FormClosed事件来做到这一点。

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

于 2013-06-18T10:03:09.977 回答
1

如果这是您的 Main-Form,由 Program.cs 调用,您可以将代码行复制this.Close()到您的 Program.cs

这看起来像:

...
Application.Run(new frmMain());
// Your code here
...
于 2013-06-18T10:10:05.183 回答
0

简而言之:不。如果保持原样,每次调用后都会有一场比赛,看是否可以在命令将它们从内存中删除this.Close之前执行紧随其后的代码行。Close最好在别处运行这些代码行。想想看,他们真的需要在关闭表单后执行吗?如果是这样,您总是可以将它们放在另一个班级或FormClosed活动中等。

于 2013-06-18T10:06:52.797 回答
0

这是 Form.Close 方法的主体:

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() 之后处理的成员字段。但是有更优雅的方法可以做到这一点(参见其他答案)。

于 2013-06-18T10:12:42.170 回答