简单地抛出应该终止程序执行的意外异常。他们被CurrentDomain_UnhandledException
抓住并在那里照顾 - 必要时记录,并且通用"这个应用程序即将崩溃,你无需做任何事情"消息显示给用户。
但是那些只需要取消操作的异常,同时向用户显示更有用的消息呢?例如通知用户无法访问文件,因为该文件正由另一个进程使用。这个异常可能是深层嵌套的,我不想在每个方法返回时检查一些标志。我宁愿有这样的事情:当用户发起最多"外部"方法 - 比如按钮单击事件处理程序,代码将包含一个try-catch块,捕获所有DisplayToUserException
,并重新抛出任何其他异常。所以我必须创建这个自定义异常类。
但是在我走这条路之前,我想知道这是否是标准的事情,或者可能有更好的解决方案。或者也许已经为此建立了一个类。因此这个问题。
答案 0 :(得分:1)
可以在UI事件周围放置一个try / catch块:
public void Button1_Click(object sender, EventArgs e)
{
try {
// Do something interesting, like calling methods that throw (nested) exceptions
// Maybe these methods do file I/O
}
// Though it's better to catch a more-specific exception or set of exceptions
catch (IOException ex){
MessageBox.Show(ex.ToString());
}
}
这限制了异常对UI操作的影响(在这种情况下,按钮单击)。
一个真正未处理的异常,你无法预料或做任何事情,仍将由AppDomain异常处理程序处理。
另请注意,异常的Message
属性意味着向用户显示。可以捕获“技术”异常,并通过用户友好的消息重新抛出异常。但请务必包含原始例外:
try {
// Do something with the file name in the <c>path</c> variable
}
catch(IOException ex){
throw new InvalidOperationException(
String.Format("Can't perform that file I/O on {0}, sorry about that", path), ex);
}