水晶报告中线程被中止例外

时间:2012-01-23 07:02:36

标签: crystal-reports report

我们在将报告导出为PDF时,线程被中止了。

以下代码用于将报告导出为PDF格式。

                    Response.Buffer = true;
                    Response.ClearContent();
                    Response.ClearHeaders();
                    Response.ContentType = "application/pdf";
                    myReportDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, Session["ReportName"].ToString());
                    Response.Flush();
                    Response.Close();

请帮我解决此例外情况。

2 个答案:

答案 0 :(得分:3)

SAP解释说:

原因

已在问题报告ID ADAPT00765364下识别并记录该问题。 该错误可能是由于Response.End()方法中使用了ExportToHttpResponse()造成的 Reponse.End()导致线程中止是一个已知问题。这是设计的 有关详细信息,请参阅Microsoft KB312629 Article

解决方法

....
 try
   {
   reportDocument.ExportToHttpResponse(format, Response, true, Page.Title);
   }
 catch (System.Threading.ThreadAbortException)
   {
   }
....

分辨率

您可以编写自己的代码,以PDF,Word,Excel等格式将Crystal Report直接导出到浏览器。您必须确保使用适当的内容类型。

将Crystal Report以PDF格式导出到Web浏览器的示例代码

try
{
 boReportDocument.Load(Server.MapPath(@"MyReport.rpt"));
 System.IO.Stream oStream = null;
 byte[] byteArray = null;
 oStream = boReportDocument.ExportToStream (ExportFormatType.PortableDocFormat);
 byteArray = new byte[oStream.Length];
 oStream.Read(byteArray, 0, Convert.ToInt32(oStream.Length - 1));
 Response.ClearContent();
 Response.ClearHeaders();
 Response.ContentType = "application/pdf";
 Response.BinaryWrite(byteArray);
 Response.Flush();
 Response.Close();
 boReportDocument.Close();
 boReportDocument.Dispose();

}
catch (Exception ex)
{
 string s = ex.Message;
}

答案 1 :(得分:0)

抛出错误是因为在ExportToHttpResponse中调用了response.End()。删除对Flush的调用并关闭响应,并在try / catch块中包含对ExportToHttpResponse的调用,以捕获并忽略System.Threading.ThreadAbortException。