最后块不执行后应用程序.(新main_form)运行

本文关键字:main form 运行 执行 应用程序 最后 | 更新日期: 2023-09-27 18:11:25

我想在我的程序退出之前执行一些代码,所以我认为编辑VS创建的program .cs看起来像:

...
try
{
    Application.Run(new main_form);
}
finally
{
    special_shutdown_code();
}
...

可以做到这一点,但是当我单击主表单右上角的[x]时,我的special_shutdown_code()没有被执行。我返回并添加了print语句:

...
try
{
    System.Console.WriteLine("Before");
    Application.Run(new main_form);
    System.Console.WriteLine("After");
}
finally
{
    System.Console.WriteLine("finally");
    special_shutdown_code();
}
System.Console.WriteLine("post-finally");
...

"Before"是唯一输出。

从我读过的申请来看。运行函数应该返回。我不知所措。如有任何解释,不胜感激。

这是一个c++/CLR + c# + C混合程序,但主要部分是c#。

我希望得到一个没有发生的事情的解释,而不是如何完成相同功能的建议。在大多数情况下,我能够解决这个问题,但是看起来最干净,最容易理解,正确的方法却根本不起作用,这让我感到困惑。

最后块不执行后应用程序.(新main_form)运行

你可以试试:

Form mainForm = new MainForm();
mainForm.Closing += delegate(...)
{
};
Application.Run(mainForm);

我在研究在没有主表单的线程上运行消息泵时遇到了这个答案。

Application.Run()有3个版本。我发现关于使用不接受参数的版本的有用信息很少。我看到最多的是Application.Run(Form),我相信在做了一些设置之后,它最终可能会调用Application.Run(new ApplicationContext(Form))。这设置了ApplicationContext。MainForm