質問

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

EDIT 1:

通常、主な方法はEnvironment.Exitを呼び出すことなく優雅メイン機能を終了するには、どのように、このようなものです?

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

おかげで、 ジョージ

役に立ちましたか?

解決

Application.Exitは本当にただ非常に優しくメッセージループを要求します。

アプリを終了したい場合は、

、最良の方法は、優雅Mainの外にそれを作る、そしてきれいに任意の追加の非バックグラウンドスレッドを閉じることです。

あなたは残酷になりたい場合は... Environment.Exit Environment.FailFast の? これは厳しいです - あなた自身のProcessを殺すとほぼ同じ。

他のヒント

次を試してみます:

Process.GetCurrentProcess().Kill();

Environment.ExitはWinformsのでは動作しないとEnvironment.FailFastは独自の例外をスローします。

あなたがそうすることを防止する何かが(当然)があるApplication.Exitを呼び出すときに、あなたのアプリケーションが正常に終了しない場合。これはe.Cancel = trueイベントでFormClosing設定フォームから、まだ実行されているバックグラウンドスレッドではないスレッドに何もすることができます。私はあなたが慎重にそれはそれはあなたのプロセスが生き続けている正確に何を検索するにはアドバイス、そして素敵な方法でそれを閉じます。それは同様にうまくアプリケーションが緊密にする必要があります。

一般的に、リサイズアプリケーションでは、メインフォームを閉じるために十分であるべきである。

私が使用して

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する

私は、プログラム内の新しいフォーム/ウィンドウを開いて、そして唯一の二番目の形式は、(それを閉じていない)ことを隠して発見したとき、私は同じ問題を抱えていた、適切Application.Exit()を経由して終了からメインフォームを妨げます;

この場合、2つのソリューションがあります。最初は、単に代わりApplication.Exitのメインフォームにclose()を使用することです()。第2の解決策は、次のコードを使用することです。

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

私はあなたがする必要があるだけで、すべてではなくapplication.exitを行うのであるとことが判明あなただけに置かれなければならないことすべて 終わり 単に十分Endコマンドが閉じる

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top