0

クラス A には Form1 (System.Windows.Forms.Form のサブクラス) メンバーがあります。

class A {
        Form1 form;
        public A()
        {
            form = new Form1();
            form.Show();
        }
    }
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        A a = new A();
        Application.Run();
    }

問題は、プログラムを終了する方法がわからないことです。Form.Closedイベントを処理するとき、または A.Dispose() を呼び出すときに Application.Exit() を試しましたが、Windows タスク マネージャーにはまだプログラムのプロセスが表示されます。

このプログラムを終了するにはどうすればよいですか?

4

4 に答える 4

4

Application.Run には 3 つの overloadがあります。これを引数なしで使用しています。

Windows はメッセージ ループでプログラムを実行しますが、フォームは気にしません。
したがって、フォームを閉じても問題ありません。プログラムは引き続き実行されます。

2 番目のオーバーロードは、誰もが使用するApplication.Run(Form)です。これは、フォームに対して Windows メッセージ ループを実行するため、ウィンドウで [閉じる] をクリックすると、アプリケーションが閉じます。

コードは次のようになります。

class A {
    Form1 form;
    public A()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        form = new Form1();
        form.Show();
        Application.Run(form);
    }
}
[STAThread]
static void Main()
{
    A a = new A();
}
于 2012-04-18T09:16:34.960 に答える
2

Microsoftに従って、これを使用する必要があります。

Application.Run(a.Form);

MSDNは次のように述べているため、

ほとんどの Windows フォーム開発者は、このバージョンのメソッドを使用する必要はありません。Run(Form) オーバーロードを使用して、メイン フォームでアプリケーションを開始し、メイン フォームが閉じられたときにアプリケーションが終了するようにする必要があります。

于 2012-04-18T09:14:24.767 に答える
1

そこに混乱があると思います。Application.Exitのドキュメントを確認してください。

ここで、Exit が Closed イベントを発生させ、そこで Exit を呼び出すと、無限ループが発生する可能性があることがわかります (アプリケーションがまだ表示されているという問題を引き起こしている可能性があります)。

于 2012-04-18T09:14:36.603 に答える
0

これを試して:

Environment.Exit(1);
于 2012-04-18T09:14:23.437 に答える