我正在使用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