最后块不执行后应用程序.(新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#。
我希望得到一个没有发生的事情的解释,而不是如何完成相同功能的建议。在大多数情况下,我能够解决这个问题,但是看起来最干净,最容易理解,正确的方法却根本不起作用,这让我感到困惑。
你可以试试:
Form mainForm = new MainForm();
mainForm.Closing += delegate(...)
{
};
Application.Run(mainForm);
我在研究在没有主表单的线程上运行消息泵时遇到了这个答案。
Application.Run()
有3个版本。我发现关于使用不接受参数的版本的有用信息很少。我看到最多的是Application.Run(Form)
,我相信在做了一些设置之后,它最终可能会调用Application.Run(new ApplicationContext(Form))
。这设置了ApplicationContext。MainForm