Có những tình huống bạn có thể sử dụng chúng, nhưng chúng sẽ không thường xuyên. Các tình huống mà tôi có thể sử dụng một bao gồm:
khai thác ngoại lệ; tùy thuộc vào ngữ cảnh, bạn có thể muốn có một ngoại lệ hoặc tin nhắn chưa được xử lý được đăng thay thế.
lặp lại các tình huống kỹ thuật, như kết xuất hoặc xử lý âm thanh hoặc gọi lại hộp danh sách, trong đó chính hành vi đó sẽ giải quyết vấn đề, đưa ra một ngoại lệ sẽ gây cản trở và ghi nhật ký ngoại lệ có thể sẽ dẫn đến 1000 tin nhắn "không thành công" .
các chương trình không thể thất bại, mặc dù ít nhất họ vẫn nên đăng nhập một cái gì đó.
đối với hầu hết các ứng dụng winforms, tôi đã thấy rằng nó đủ để có một tuyên bố thử duy nhất cho mỗi đầu vào của người dùng. Tôi sử dụng các phương thức sau: (AlertBox chỉ là một trình bao bọc MessageBox.Show nhanh)
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 { }
}
Sau đó, mọi trình xử lý sự kiện có thể làm một cái gì đó như:
private void mCloseToolStripMenuItem_Click(object pSender, EventArgs pEventArgs)
{
EditorDefines.TryAction(Dispose);
}
hoặc là
private void MainForm_Paint(object pSender, PaintEventArgs pEventArgs)
{
EditorDefines.TryActionQuietly(() => Render(pEventArgs));
}
Về mặt lý thuyết, bạn có thể có TryActionSilently, có thể tốt hơn để kết xuất các cuộc gọi để một ngoại lệ không tạo ra vô số tin nhắn.