1

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

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

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

...
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#。

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

4

2 回答 2

1

你可以试试:

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

};
Application.Run(mainForm);

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

于 2011-10-13T22:07:34.227 回答
0

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

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

于 2012-07-26T16:50:45.243 回答