我正在使用Crystal Reports进行报告的应用程序。它在ReportDocument对象中打开一个给定的报告,做它需要做的事情然后关闭报告。清理Crystal Reports ReportDocument对象使用的资源的最佳方法是什么?
using (var report = OpenReport(reportSourceInfo))
{
// Do stuff with the report
report.Close();
}
OpenReport方法会对源文件进行一些验证并返回一个打开的ReportDocument对象。
测试显示此代码完成了它意味着要做的事情,似乎没有任何问题。我真正建议的问题是,当我执行代码分析(CA)生成报告项目时,我收到以下CA消息:
CA2202:Microsoft.Usage:Object'report'can be在“CrystalReportingProvider.ReportExecute(ReportSourceInformation)”方法中多次处理。为避免生成System.ObjectDisposedException,您不应该在对象上多次调用Dispose。
现在显然我可以改变代码,所以我没有得到这个CA警告,但我的问题是我应该?
Crystal Reports ReportDocument.Close()方法是否会尽一切努力正确处理资源清理?该消息似乎表明,Close方法调用Dispose方法,但这看起来不正确。
任何意见,将不胜感激。
这似乎飞在面对的编码惯例,如果你已经完成了一个对象的类型实现IDisposable那么你应该调用Dispose()对它,或者你应该使用一个使用块来做到这一点 – Fooksie 2012-02-08 00:59:23
我检查了程序集并发现Close不会调用Dispose。 – LostInComputer 2017-03-17 03:02:03