Hay situaciones en las que podría usarlos, pero deberían ser muy poco frecuentes. Las situaciones en las que podría usar una incluyen:
registro de excepciones; dependiendo del contexto, es posible que desee publicar una excepción no controlada o un mensaje.
situaciones técnicas en bucle, como procesamiento o procesamiento de sonido o una devolución de llamada de cuadro de lista, donde el comportamiento en sí mismo demostrará el problema, lanzar una excepción solo se interpondrá en el camino, y registrar la excepción probablemente solo dará como resultado miles de mensajes "fallidos a XXX" .
programas que no pueden fallar, aunque al menos deberían estar registrando algo.
Para la mayoría de las aplicaciones winforms, he descubierto que es suficiente tener una única declaración de prueba para cada entrada del usuario. Utilizo los siguientes métodos: (AlertBox es solo un rápido 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 { }
}
Entonces cada controlador de eventos puede hacer algo como:
private void mCloseToolStripMenuItem_Click(object pSender, EventArgs pEventArgs)
{
EditorDefines.TryAction(Dispose);
}
o
private void MainForm_Paint(object pSender, PaintEventArgs pEventArgs)
{
EditorDefines.TryActionQuietly(() => Render(pEventArgs));
}
Teóricamente, podría tener TryActionSilently, que podría ser mejor para realizar llamadas de modo que una excepción no genere una cantidad interminable de mensajes.