我们在ASP.Net应用程序中遇到问题,在为用户生成报告后,Crystal Reports引擎会在服务器的Temp文件夹中留下垃圾.tmp文件。
所以我们试图弄清楚如何在Report对象上运行.Close()和.Dispose()方法,但我们发现导出后代码永远不会运行。
MyReport.Report.ExportToHttpResponse(ExportFormatType.PortableDocFormat,
this.Response, true, "My_Report");
MyReport.Report.Close();
MyReport.Report.Dispose();
最后两行设置的断点永远不会被击中,我们也尝试在那里放置其他代码来测试处理。它都没有运行。 (我也在其他网站上看到过类似代码的问题,但没有答案)
我假设ExportToHttpResponse方法在此时向用户返回文件流(PDF),结束处理,因此其余代码无法运行。如果是这种情况,我们如何让CR对临时文件执行清理,而Close()和Dispose()方法应该这样做?我们是否必须在实际清理后实施手册?
答案 0 :(得分:3)
我没有办法重现这个问题,所以我会抛弃你可以使用using语句,它允许你指定何时释放对象。
What is the C# Using block and why should I use it? http://msdn.microsoft.com/en-us/library/yh598w02(VS.80).aspx
没有试过这个,但我想你可以做一些像
这样的事情using(MyReport m = new MyReport())
{
m.Report.ExportToHttpResponse(ExportFormatType.PortableDocFormat,
this.Response, true, "My_Report");
}
当我输入它时,我不确定它与你已经有什么不同,但是哦,这是尝试的东西。在我脑海里,这是有效的。 :)
希望它有所帮助。
答案 1 :(得分:3)
我确实遇到了这个问题,发现可以通过将导出方法包含在Try Catch块中并将Close()和Dispose()方法放在Finally中来强制运行Close()和Dispose()方法。像这样:
Try
MyReport.Report.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Page.Response, True, ReportName)
Catch ex As System.Exception
Finally
MyReport.Report.Close()
MyReport.Report.Dispose()
End Try