당신이 그들을 사용할 수있는 상황이 있지만, 매우 드물게 있어야합니다. 내가 사용할 수있는 상황은 다음과 같습니다.
예외 로깅; 상황에 따라 처리되지 않은 예외 또는 메시지가 대신 게시 될 수 있습니다.
렌더링 또는 사운드 처리 또는 목록 상자 콜백과 같은 반복되는 기술 상황에서 동작 자체가 문제를 보여주고 예외를 throw하면 예외가 발생하며 예외를 로깅하면 1000의 "XXX 실패"메시지가 나타납니다. .
최소한 무언가를 로깅해야하지만 실패 할 수없는 프로그램 .
대부분의 winforms 응용 프로그램의 경우 모든 사용자 입력에 대해 단일 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를 사용할 수 있습니다. 이는 예외가 끝없는 양의 메시지를 생성하지 않도록 호출 렌더링에 더 좋습니다.