มีสถานการณ์ที่คุณอาจใช้พวกเขา แต่พวกเขาควรจะไม่บ่อยนัก สถานการณ์ที่ฉันอาจใช้อย่างใดอย่างหนึ่งรวมถึง:
การบันทึกข้อยกเว้น; ขึ้นอยู่กับบริบทคุณอาจต้องการข้อยกเว้นที่ไม่สามารถจัดการได้หรือโพสต์ข้อความแทน
สถานการณ์ทางเทคนิคที่วนลูปเช่นการเรนเดอร์หรือการประมวลผลเสียงหรือการโทรกลับลิสต์บ็อกซ์ซึ่งพฤติกรรมจะแสดงให้เห็นถึงปัญหาการโยนข้อยกเว้นจะเข้าไปในทางและการบันทึกข้อยกเว้นอาจส่งผลให้ข้อความ .
โปรแกรมที่ไม่สามารถล้มเหลวได้แต่อย่างน้อยก็ควรมีการบันทึกบางอย่าง
สำหรับแอปพลิเคชัน winforms ส่วนใหญ่ฉันพบว่าพอเพียงที่จะมีคำสั่งลองเดียวสำหรับผู้ใช้ทุกคน ฉันใช้วิธีการต่อไปนี้: (AlertBox เป็นเพียง 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 { }
}
จากนั้นตัวจัดการเหตุการณ์ทุกคนสามารถทำสิ่งที่ชอบ:
private void mCloseToolStripMenuItem_Click(object pSender, EventArgs pEventArgs)
{
EditorDefines.TryAction(Dispose);
}
หรือ
private void MainForm_Paint(object pSender, PaintEventArgs pEventArgs)
{
EditorDefines.TryActionQuietly(() => Render(pEventArgs));
}
ในทางทฤษฎีคุณอาจมี TryActionSilently ซึ่งอาจดีกว่าสำหรับการแสดงผลการโทรเพื่อที่ข้อยกเว้นจะไม่สร้างข้อความจำนวนไม่รู้จบ