在ReportDocument.ExportToHttpResponse中,Try/Catch无法捕获System.Threading.ThreadAbortException异常

6
我尝试使用ExportToHttpResponse导出Crystal ReportDocument,如下所示:
report.ExportToHttpResponse(exportOptions, HttpContext.Current.Response, true, "test");

当我第一次尝试运行它时,我收到了一个 System.Threading.ThreadAbortException。在阅读关于这是ExportToHttpResponse已知错误的这个问题后,我尝试实现建议的解决方法,将语句包装在try/catch块中,如下所示:

try
{
    report.ExportToHttpResponse(expOptions, HttpContext.Current.Response, true, "test");
}
catch (System.Threading.ThreadAbortException e)
{
}

据我理解,这段代码应该可以捕获并忽略错误,然后继续执行。但是,尽管我已经捕获了异常,但在catch语句的结尾括号处仍然会抛出System.Threading.ThreadAbortException异常。我的问题是,为什么即使我显然已经捕获了它,仍然会收到异常,并且如何修复它以忽略异常?

6
ThreadAbortException是一种特殊的异常,可以被捕获,但它会在catch块结束时自动再次引发。请参见备注部分:http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx - Oded
1
你在哪里看到这些错误?你是否将它们记录在全局错误处理程序中?如果是在全局错误处理程序中,例如 global.asax 中的 Applicaiton_Error,你只需要过滤掉它们并不做任何处理。 - David
1个回答

8
您可以捕获ThreadAbortException并调用Thread.ResetAbort方法来取消异常的冒泡。 但是请记住,response.end不是一个好主意。每当您可以尝试调用HttpApplication.CompleteRequest(),并阅读这个SO问题对我在这方面非常有用。

Thread.ResetAbort解决了我的问题,谢谢。我知道Response.End不是一个好主意,但在这种情况下我不是调用它的人。也感谢您提供的额外信息。 - jaredk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接