簡體   English   中英

在Application.Run(new main_form)之后最終阻止不執行

[英]finally block not executing after Application.Run(new main_form)

我想在程序退出之前執行一些代碼,因此我認為對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#。

我希望對未發生的事情進行解釋,而不是對如何實現相同功能的建議。 在大多數情況下,我都可以解決此問題,但是看起來最干凈,最容易理解的正確方法以及完全不起作用的正確方法使我感到困惑。

您可以嘗試:

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

};
Application.Run(mainForm);

不知道這是否真的有效...

當我在沒有主要形式的線程上運行消息泵時遇到了答案。

有3個版本的Application.Run() 我發現關於使用不帶參數的版本的信息很少。 我看到最多的是Application.Run(Form) ,我相信最終可能在進行一些設置后調用Application.Run(new ApplicationContext(Form)) 設置`ApplicationContext.MainForm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM