Es gibt Situationen, in denen Sie sie verwenden könnten, aber sie sollten sehr selten sein. Zu den Situationen, in denen ich eine verwenden könnte, gehören:
Ausnahmeprotokollierung; Je nach Kontext möchten Sie möglicherweise stattdessen eine nicht behandelte Ausnahme oder Nachricht.
Das Schleifen technischer Situationen wie Rendering oder Soundverarbeitung oder ein Listbox-Rückruf, bei dem das Verhalten selbst das Problem demonstriert, das Auslösen einer Ausnahme im Weg steht und das Protokollieren der Ausnahme wahrscheinlich nur zu Tausenden von "Fehlgeschlagen an XXX" -Nachrichten führt .
Programme, die nicht fehlschlagen können, obwohl sie zumindest noch etwas protokollieren sollten.
Für die meisten Winforms-Anwendungen habe ich festgestellt, dass es ausreicht, für jede Benutzereingabe eine einzige try-Anweisung zu haben. Ich verwende die folgenden Methoden: (AlertBox ist nur ein schneller MessageBox.Show-Wrapper)
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 { }
}
Dann kann jeder Event-Handler Folgendes tun:
private void mCloseToolStripMenuItem_Click(object pSender, EventArgs pEventArgs)
{
EditorDefines.TryAction(Dispose);
}
oder
private void MainForm_Paint(object pSender, PaintEventArgs pEventArgs)
{
EditorDefines.TryActionQuietly(() => Render(pEventArgs));
}
Theoretisch könnten Sie TryActionSilently verwenden, das möglicherweise besser zum Rendern von Anrufen geeignet ist, damit eine Ausnahme nicht unendlich viele Nachrichten generiert.