Tôi đang làm việc trên một ứng dụng sử dụng Crystal Reports cho báo cáo. Nó sẽ mở ra một báo cáo nhất định trong một đối tượng ReportDocument, làm những gì nó cần làm và sau đó đóng báo cáo.Cách tốt nhất để dọn dẹp tài nguyên được sử dụng bởi đối tượng Crystal Reports ReportDocument là gì?
using (var report = OpenReport(reportSourceInfo))
{
// Do stuff with the report
report.Close();
}
Phương thức OpenReport thực hiện xác thực một số tệp nguồn và trả về đối tượng ReportDocument mở.
Thử nghiệm đã cho thấy rằng mã này thực hiện những gì nó có nghĩa là để làm và dường như không có vấn đề. Vấn đề tôi thực sự sau khi tư vấn là khi tôi thực hiện phân tích mã (CA) của dự án báo cáo, tôi nhận được thông báo CA sau:
CA2202: Microsoft.Usage: Object 'report' có thể xử lý nhiều hơn một lần trong phương thức 'CrystalReportingProvider.ReportExecute (ReportSourceInformation)'. Để tránh tạo ra một System.ObjectDisposedException bạn không nên gọi Dispose nhiều hơn một lần trên một đối tượng.
Bây giờ rõ ràng là tôi có thể thay đổi mã xung quanh để không nhận được cảnh báo CA này, nhưng câu hỏi của tôi là phải không?
Phương thức báo cáo Crystal ReportDocument.Close() có làm mọi thứ để xử lý dọn dẹp tài nguyên đúng cách không? Thông báo dường như chỉ ra rằng phương thức Close gọi phương thức Dispose, nhưng điều đó dường như không đúng.
Mọi lời khuyên sẽ được đánh giá cao.
Điều đó dường như bay khi đối mặt với quy ước mã hóa rằng nếu bạn đã hoàn thành với một đối tượng có loại thực hiện IDisposable thì bạn nên gọi Dispose() trên nó, cách khác bạn nên sử dụng khối sử dụng để thực hiện điều này – Fooksie
Tôi đã kiểm tra lắp ráp và thấy rằng Close không gọi Dispose. – LostInComputer