web-dev-qa-db-ja.com

Application.Exit

VSTS 2008 + .Net 3.5 + C#を使用してWindowsフォームアプリケーションを開発しています。私の混乱は、Application.Exitがアプリケーションを強制的に終了させないようです。そうでない場合、アプリケーションを終了させるためにどのメソッドを呼び出す必要がありますか?

編集1:

通常、mainメソッドは次のようになります。Environment.Exitを呼び出さずにMain関数を正常に終了する方法は?

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        try
        {
            Application.Run(new Form1());
        }
        catch (Exception ex)
        {
            Console.WriteLine (ex.Message);
        }
    }

よろしくお願いします、ジョージ

20
George2

Application.Exit本当にメッセージループに非常に穏やかに尋ねるだけです。

アプリを終了させたい場合は、Mainからアプリを適切に作成し、追加の非バックグラウンドスレッドをすべてクリーンに閉じるのが最善の方法です。

残忍になりたいなら... Environment.Exit または Environment.FailFastnoteこれは厳しいです-自分のProcessを殺すのとほぼ同じです。

35
Marc Gravell

次のことを試してください。

Process.GetCurrentProcess().Kill();

Environment.ExitはWinformsでは機能せず、Environment.FailFastは独自の例外をスローします。

Application.Exitを呼び出したときにアプリケーションが正常に終了しない場合は、(明らかに)それを妨げる何かがあります。これは、FormClosingイベントのフォーム設定e.Cancel = trueから、まだ実行中のバックグラウンドスレッドではないスレッドまで何でもかまいません。プロセスを存続させるのは何であるかを注意深く調査し、それをうまく閉じることをお勧めします。これにより、アプリケーションもうまく閉じるはずです。

通常、winformsアプリケーションでは、メインフォームを閉じるだけで十分です。

4
Fredrik Mörk

私が使う

if (System.Windows.Forms.Application.MessageLoop)
{
   // Use this since we are a WinForms app
   System.Windows.Forms.Application.Exit();
}
else
{
   // Use this since we are a console app
   System.Environment.Exit(1);
}

から http://geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx

2
Peter Gfader

プログラム内で新しいフォーム/ウィンドウを開くことを発見したときに同じ問題が発生し、その2番目のフォームを非表示にする(閉じない)だけでは、メインフォームがApplication.Exit()を介して適切に終了できなくなりました。

この場合、2つの解決策があります。 1つは、Application.Exit()の代わりにメインフォームでClose()を使用することです。 2番目の解決策は、次のコードを使用することです。

if (secondForm != null && !secondForm.IsDisposed) secondForm.Dispose();
1
Dan W