Application.Exit
-
21-08-2019 - |
質問
私は、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コマンドが閉じる