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);
}
}
よろしくお願いします、ジョージ
Application.Exit
本当にメッセージループに非常に穏やかに尋ねるだけです。
アプリを終了させたい場合は、Main
からアプリを適切に作成し、追加の非バックグラウンドスレッドをすべてクリーンに閉じるのが最善の方法です。
残忍になりたいなら... Environment.Exit
または Environment.FailFast
? noteこれは厳しいです-自分のProcess
を殺すのとほぼ同じです。
次のことを試してください。
Process.GetCurrentProcess().Kill();
Environment.Exit
はWinformsでは機能せず、Environment.FailFast
は独自の例外をスローします。
Application.Exit
を呼び出したときにアプリケーションが正常に終了しない場合は、(明らかに)それを妨げる何かがあります。これは、FormClosing
イベントのフォーム設定e.Cancel = true
から、まだ実行中のバックグラウンドスレッドではないスレッドまで何でもかまいません。プロセスを存続させるのは何であるかを注意深く調査し、それをうまく閉じることをお勧めします。これにより、アプリケーションもうまく閉じるはずです。
通常、winformsアプリケーションでは、メインフォームを閉じるだけで十分です。
私が使う
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番目のフォームを非表示にする(閉じない)だけでは、メインフォームがApplication.Exit()を介して適切に終了できなくなりました。
この場合、2つの解決策があります。 1つは、Application.Exit()の代わりにメインフォームでClose()を使用することです。 2番目の解決策は、次のコードを使用することです。
if (secondForm != null && !secondForm.IsDisposed) secondForm.Dispose();