2012-03-21 16 views
1

私は...カスタム例外ハンドラを書く必要がでてるカスタム例外ハンドラ

MYアプリケーションは、おそらく例外の異なる種類を投げるために起こっている、と私は(彼らはすべて、単一のハンドラによって処理を受けるたいです私は何千もの "try-catch"ブロックを使う必要はありません)。

私はAppDomainのUnhandledExceptionハンドラを試しましたが、例外がキャッチされると、アプリケーションが必然的に閉じられるようです。

私の考えを達成する方法はありますか?

EDIT:

は、あなたの迅速な回答いただきありがとうございます、私はあなたが私の状況をよりよく理解したいのですが:私が持っている、例えば、(可逆)カスタム例外をスローするクラスを。さて、このクラスは複数の他のクラスから呼び出されているので、私はそれらのすべての1つにtry-catchブロックを書く必要があります(少なくともあなたの返信が私に考えさせるものです)。

Soここではすべてをキャッチできるハンドラが必要です。

+0

あなたはどのようなアプリケーションを書いていますか? WinForms?コマンドライン? –

+0

ええ、私はこの詳細を書くのを忘れていました:私はコンソールアプリケーションを書いています;) – user1264377

+1

Re Edit:あなたのコードはどうやってエラーの後にもどりますか?そして:クラスは呼び出しも投げもしません。メソッドは行います。 –

答えて

-1
try 
{ 
    // Code that needs exception handling 
} 
catch (Exception ex) 
{ 
    // Handle exception. You may use ex.GetType() 
} 

これが適切でない場合は、なぜあなたの質問で説明してください。

1

try/catchブロックは数千回は必要ありません。

あなたが決定を下すことができるポイントで理解しているものだけをキャッチします。

例外をキャッチすることはあなたのロジックの大部分です(try/finallyとは異なります)、1つのセントラルハンドラを使用することは通常ありません。

これを例外の適切な使用方法を学ぶ機会として考えてください。

3

あなたべきキャッチ特定の例外あなたがそれらを処理する最高のことができますあなたのコード内のポイントで。これにより何千ものtry-catchブロックが生成されるべきではなく、例外処理のローカライズされた領域を見つけるべきです。

たとえば、データベースやファイルシステムとやり取りするときに、サービス境界で例外を処理する傾向があります。これらのサービス境界では、例外を処理して論理回復を実行できます。

catchが値を追加しないtry-catchブロックを作成している場合、コードの回復に役立たない場合は、例外をキャッチして値を追加していません!

0

tryとcatchブロックでコードを囲み、例外をキャッチします。すべての例外はExceptionから派生しているため、他の場所では処理されない例外がスローされます。ただし、例外がスローされた場合は、アプリケーションの無効な状態が考えられます。あなたはいつも例外の後に続けることはできません。 別の直接的なアプローチは、Application.ThreadException(WinForms)に登録することですが、アプリケーションを継続して実行する予定がある場合は、これを使用しないでください。これはメッセージを表示したい場合、エラー報告を送信してアプリケーションを閉じる方法の場合です。

1

アプリケーションを終了せずにAppDomainのUnhandledException Handlerを使用することができます。しかし、私は通常、あなたがキャッチにすべての例外ハンドラを必要はありません、他の回答に同意しない

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Program_UnhandledException); 

そして

private static void Program_UnhandledException(object sender, System.Threading.ThreadExceptionEventArgs e) 
{ 
    //Handle the exception here... 
} 

:私は逃した例外をログに記録する、あまりにもそれを行います。発生した例外を処理することが推奨されるアクションである必要があります。

編集:コンソールアプリケーションでも同じように動作するかどうかはわかりません。

+0

同じインターフェースを実装している何百ものクラスで発生する可能性があります...それらのすべてにtry-catchブロックを書くのはかなり迷惑で醜いです... – user1264377

関連する問題