блок finally не выполняется после Application.Run (новый main_form) - PullRequest
1 голос
/ 14 октября 2011

Я хотел, чтобы какой-нибудь код выполнялся до выхода из моей программы, поэтому я подумал, что редактирование в 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 #.

Я надеюсь получить объяснение того, что не происходит, а не предложения о том, как выполнить те же функции. Я могу обойти это в большинстве случаев, но то, что мне показалось самым чистым, легким для понимания и правильным способом сделать так, чтобы это вообще не работало, меня смущает.

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Вы можете попробовать:

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

};
Application.Run(mainForm);

Не уверен, что это действительно сработает ...

0 голосов
/ 26 июля 2012

Я наткнулся на ответ, просматривая сообщения насосов сообщений в потоках без главной формы.

Существует 3 версии Application.Run().Я нашел очень мало хорошей информации об использовании версии, которая не требует аргументов.Больше всего я вижу Application.Run(Form), который, как мне кажется, в итоге вызывает Application.Run(new ApplicationContext(Form)), возможно, после некоторой настройки.Это устанавливает `ApplicationContext.MainForm

...