あなたがそれらを使うかもしれない状況があります、しかしそれらは非常にまれであるはずです。私が使用する可能性のある状況は次のとおりです。
例外ログ; コンテキストによっては、代わりに未処理の例外またはメッセージを投稿する必要がある場合があります。
レンダリングやサウンド処理、リストボックスコールバックなどの技術的な状況をループすると、動作自体が問題を示し、例外をスローすると邪魔になり、例外をログに記録すると、おそらく数千の「XXXに失敗しました」というメッセージが表示されます。 。
少なくとも何かをログに記録しているはずなのに、失敗することのないプログラム。
ほとんどのwinformsアプリケーションでは、ユーザー入力ごとに1つのtryステートメントがあれば十分であることがわかりました。私は次のメソッドを使用します:(AlertBoxは単なるMessageBox.Showラッパーです)
public static bool TryAction(Action pAction)
{
try { pAction(); return true; }
catch (Exception exception)
{
LogException(exception);
return false;
}
}
public static bool TryActionQuietly(Action pAction)
{
try { pAction(); return true; }
catch(Exception exception)
{
LogExceptionQuietly(exception);
return false;
}
}
public static void LogException(Exception pException)
{
try
{
AlertBox(pException, true);
LogExceptionQuietly(pException);
}
catch { }
}
public static void LogExceptionQuietly(Exception pException)
{
try { Debug.WriteLine("Exception: {0}", pException.Message); } catch { }
}
次に、すべてのイベントハンドラーは次のようなことを実行できます。
private void mCloseToolStripMenuItem_Click(object pSender, EventArgs pEventArgs)
{
EditorDefines.TryAction(Dispose);
}
また
private void MainForm_Paint(object pSender, PaintEventArgs pEventArgs)
{
EditorDefines.TryActionQuietly(() => Render(pEventArgs));
}
理論的には、TryActionSilentlyを使用できます。これは、例外が無限の量のメッセージを生成しないように、呼び出しをレンダリングするのに適している場合があります。