嘿:)
是否有任何方法在全球范围内捕获已处理的异常?我知道我们可以用“AppDomain.CurrentDomain.UnhandledException”和"Application.ThreadException“捕获未处理的异常,但我想在我已经捕获的异常中添加一些处理(例如写入日志等)。
谢谢
发布于 2010-11-24 07:20:52
通常,您可能希望在代码中的最低级别捕获异常。相对于异常发生的位置,它们被传递得越近,您就越有可能修复导致它们的问题。
如果您的all. 不能在这个级别上采取任何纠正措施,希望解决导致异常的问题,那么就不应该在上处理它--只是让异常泡起来,然后按您的意愿在全局处理它。
尽管如此,如果您已经在较低级别处理了异常,那么--您将能够在更高级别上捕获它的唯一方法--是在较低级别上从Catch块获取 它。
因此,例如:
try
{
//your code
}
catch (SomeException e)
{
//take any relevant handling measures
//rethrow the exception
throw;
}当然,这在技术上意味着这个较低级别的Try/Catch块无法处理异常,但这是在更高级别上捕获任何东西的唯一方法。
有关重新抛出异常的详细信息,请参阅:
发布于 2010-11-24 07:15:34
您可以重新抛出相同的异常,并在调用模块/日志记录模块中捕获它,然后将其记录下来。例如:
private void DivideByZero()
{
try
{
int x = 2/0;
}
cath(Exception ex)
{
Console.Writeline(ex.ToString());
throw;
}
}
void Main(string[] a)
{
try
{
DivideByZero();
}
catch(Exception x)
{
// write logging code here ..
}
}发布于 2010-11-24 07:21:37
不,没有全局异常事件。这将是非常危险的,您将捕获来自其他模块的各种内部异常,这些模块不是用于公共用途的。它还可能淹没您的日志异常。
为了达到同样的效果,您应该更有条理地处理异常。封装异常的实际处理,并在实际的catch块中执行最少的工作。或者,只要在某个地方有一个"HandleException“方法,就可以传递每个异常。您还可以查看企业库中的异常处理块。
https://stackoverflow.com/questions/4264276
复制相似问题