最终阻止在Application.Run(new main_form)之后不执行

时间:2011-10-13 22:00:51

标签: c# winforms visual-studio-2008 interop try-finally

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

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

可以解决问题,但是当我单击主窗体右上角的[x]时,我的special_shutdown_code()没有被执行。我回去并添加了打印声明:

...
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");
...

“之前”是唯一打印的输出。

从我读过的内容中,应该返回Application.Run函数。我迷路了。任何解释都将不胜感激。

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

我希望能够解释未发生的事情,而不是如何实现相同功能的建议。在大多数情况下,我能够解决这个问题,但看起来最干净,最容易理解的东西,以及完全不工作的正确方法让我感到困惑。

2 个答案:

答案 0 :(得分:1)

你可以尝试:

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

};
Application.Run(mainForm);

不确定这是否真的有用......

答案 1 :(得分:0)

我在查看没有主窗体的线程上运行消息泵时遇到了答案。

Application.Run()有3个版本。我发现使用不带参数的版本的信息很少。我最常见的是Application.Run(Form),我相信在完成某些设置后可能最终会调用Application.Run(new ApplicationContext(Form))。这将设置`ApplicationContext.MainForm