Application.Exit()、Application.ExitThread()、Environment.Exit()など、アプリケーションを終了する方法がいくつかあることを理解しています。
私は外部の「コモンズ」ライブラリを持っていて、失敗をログに記録する汎用のFailIfメソッドを作成しようとしています。それ。
public static void FailIf(Boolean fail, String message, Int32 exitCode = 1)
{
if (String.IsNullOrEmpty(message))
throw new ArgumentNullException("message");
if (fail)
{
//Do whatever I need to do
//Currently Environment.Exit(exitCode)
Environment.Exit(exitCode);
}
}
私は、Environment.Exitを使用することは、WinFormアプリに関しては対処するための最良の方法ではなく、WPFアプリとSilverlightを操作するときに、さまざまな方法で終了することを読んだことがあります...私の質問は本当に:
すべてのアプリケーションタイプをカバーするために、何をすれば正常に終了できますか?
環境とアプリケーションの違いについては、こちらをご覧ください。
Application.Exit Vs Environment.Exit
そのページの下部に、実行する操作の例があります。
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);
}
単に中止する場合は、Environment.Exit()
を使用します。それが非常に重要なものである場合(どのような種類のクリーンアップも処理できない場合)、Environment.FailFast()
を使用します。
基本的な例外処理を使用することをお勧めします。そのため、System.Environment.Exit(1)の代わりに、新しいApplicationException(message)をスローして、メインメソッドへの例外をバブルアップします。
try{
Application.Run(new MyForm());
}
catch(ApplicationException){
// do custom cleanup/reporting
}
メインスレッドから例外をスローすることを確認してください。そうでない場合は、コースをスローする前にそれを呼び出してください。