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

「Before」が印刷された唯一の出力でした。

私が読んだものから、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 に答える