public ActionResult CustomChart(int reportID)
{
Chart chart = new Chart();
// Save the chart to a MemoryStream
var imgStream = new MemoryStream();
chart.SaveImage(imgStream);
imgStream.Seek(0, SeekOrigin.Begin);
// Return the contents of the Stream to the client
return File(imgStream, "image/png");
}
Tôi quen với việc sử dụng câu lệnh 'sử dụng' kết hợp với MemoryStream. Đây có phải là kịch bản mà câu lệnh 'sử dụng' không cần thiết không? Hoặc là nó hợp lệ để gọi trở lại bên trong của một tuyên bố 'sử dụng'?Liệu MemoryStream có được xử lý tự động khi trả lại nó như một ActionResult không?
EDIT:
Đối với mục đích của tôi, tôi đã phát hiện ra rằng sự ra đời của một 'sử dụng' tuyên bố không làm việc (ném một ObjectDisposedException). Dưới đây là những gì tôi đang thực hiện với phía khách hàng:
$('#ReportTest').bind('load', function() {
$('#LoadingPanel').hide();
$(this).unbind('load');
}).bind('error', function() {
$('#LoadingPanel').hide();
$(this).unbind('error');
}).attr('src', '../../Chart/CustomChart?ReportID=' + settings.id);
Nó luôn luôn là một ý tưởng tốt để sử dụng 'sử dụng' tuyên bố khi giao dịch với các lớp mà thực hiện IDisposable, có hoặc không có tin ASP.NET đang xảy ra để làm sạch sau khi bạn. –
'Tệp (luồng, chuỗi)' làm gì với luồng? thông thường đối tượng đã tạo luồng cũng nên xử lý luồng. trong trường hợp đó bạn sẽ chịu trách nhiệm xử lý luồng. –
@GeorgeStocker có thể gọi phương thức 'Dispose()' không? Tôi nghĩ sau khi 'return' được gọi là nó sẽ không hoàn thành khối' using'. –