私はwinformsアプリケーションを開発していますが、例外処理のベストプラクティスは何かを知りたいと思います。例外が発生するたびに、必要な情報、つまりメッセージとスタックトレースを表示する例外ダイアログを開きます。私が持っている重大な混乱は、ユーザーにフレンドリーなメッセージだけを見せたいと同時に、開発者がデバッグに必要なデータを取得することを確認したい場合です。これを行う最善の方法は何ですか?例外処理とユーザーフレンドリーメッセージ
2
A
答えて
2
私は個人的に使用していませんが、Red Gate's Exception Hunterはかなりクールなツールのようです。あなたの最善の策は、ディスクにエラーを記録することです。誰かがそれを見る必要がありますが、ユーザーの方には表示されないようにする必要があります。必要に応じて、(OKをクリックするだけで)Webサイトから例外情報を送信し、トレースをスタックするようユーザーに求めるウィンドウを開くことができます。おそらくパラメータ値を送信しないことを意味する個人情報を送信しないでください。
編集:ああ、「例外とスタックトレース」とは言わないでください。 「エラーが発生しましたが、あなたの助けを借りて迅速に修正することができます。現時点で____にエラー情報を自動的に送信しますか?エラー報告とともに個人情報は送信されません。レポートの詳細情報を表示するには、「詳細」をクリックしてください。詳細をクリックすると、ウィンドウが垂直方向に展開され、データとともに読み込み専用のテキストボックスが表示されます。
0
catch (Exception ex)
{
cApp.DB.LogException(ex);
Messagebox.Show(...);
}
cApp.DB.LogException(ex)
はデータベースがダウンしていない限り、テキストファイルに追加されます。
0
私はWinFormsで書いたユーティリティプログラムで使用するユーティリティメソッドを持っています。
コンビニエンスオーバーロード:
private void PerformUIAction(Action action)
{
PerformUIAction(action, (string) null);
}
private void PerformUIAction(Action action, string message)
{
PerformUIAction(action,() => message);
}
本物1:の
private void PerformUIAction(Action action, Func<string> messageHandler)
{
var saveCursor = Cursor;
Cursor = Cursors.WaitCursor;
try
{
action();
}
catch (Exception ex)
{
MessageBox.Show(
messageHandler() ?? ex.Message,
"Exception!",
MessageBoxButtons.OK,
MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1,
MessageBoxOptions.DefaultDesktopOnly);
// Replace with logging code. The important part is ex.ToString(),
// not ex.Message
Debug.WriteLine(ex.ToString(), "Exception");
throw;
}
finally
{
Cursor = saveCursor;
}
}
例はほとんど注意を払って、それは(専門家は彼らの批判を惜しまないようにしましょう)生産のWinFormsアプリケーションで役に立つかもしれません使用:
private void _samplesMenu_AfterSelect(object sender, TreeViewEventArgs e)
{
PerformUIAction(
delegate
{
// Do the real work of the event in here.
// You can reference sender and e
},
delegate
{
return string.Format(
"Error while processing action {1} for node {0}",
e.Node.FullPath, e.Action);
});
}
0
あなたの答えをありがとう...私はいくつかのスタックをダンプすると思いますログファイルと私の場合にはユーザーフレンドリーなメッセージが表示されます:)
関連する問題
- 1. 例外処理
- 2. 例外処理
- 3. スマートポインタと例外処理
- 4. 例外処理とメモリ
- 5. 例外処理とロギングアプリケーションブロックエンタープライズライブラリ5.0
- 6. ジャージとフィルター例外処理
- 7. TPLと例外処理
- 8. エラーページレジストラとグローバル例外処理
- 9. Zend AMFと例外処理
- 10. スプリングバッチページリーダーと例外処理
- 11. エラー処理と対象処理の例外処理の比較
- 12. モノトーングローバル例外処理
- 13. 例外処理エラー
- 14. MVVM例外処理
- 15. Android。例外処理
- 16. DB2例外処理
- 17. DB2例外処理
- 18. カスタム例外処理
- 19. JAXB例外処理
- 20. TimeOut例外処理
- 21. ノード例外処理
- 22. 例外処理オーダー
- 23. Android例外処理
- 24. epoll例外処理
- 25. Python例外処理
- 26. Java例外処理
- 27. AddOnPreRenderCompleteAsync例外処理
- 28. java例外処理
- 29. Python:ODBC例外処理
- 30. 例外処理SQL
これは単純なtry catchとはどのように違いますか?ある言語構成を別の言語構成に変更して、同じ効果が得られます。 – nawfal
「待機」カーソルが表示され、アクションが実行され、MessageBoxに例外が表示されます。 –
hmmはい私はそれを見落とし、すでに私の解決策でこれを実装しています:P – nawfal