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");
}
Я привык использовать оператор using в сочетании с MemoryStreams. Это сценарий, в котором оператор using не требуется? Или допустимо вызывать return внутри оператора using?
РЕДАКТИРОВАТЬ:
Для моих целей я обнаружил, что введение оператора using НЕ работает (вызывает исключение ObjectDisposedException). Вот что я делаю на стороне клиента:
$('#ReportTest').bind('load', function () {
$('#LoadingPanel').hide();
$(this).unbind('load');
}).bind('error', function () {
$('#LoadingPanel').hide();
$(this).unbind('error');
}).attr('src', '../../Chart/CustomChart?ReportID=' + settings.id);
File(stream, string)
делает с потоком? обычно объект, создавший поток, также должен избавляться от потока. в этом случае вы будете ответственны за утилизацию потока. - person Jason Meckley   schedule 10.01.2012Dispose()
? Я бы подумал, что после вызоваreturn
он не завершит блокusing
. - person   schedule 10.01.2012finally
, так что да - он будет вызван. - person vcsjones   schedule 10.01.2012Dispose
одноразовые предметы. Но дляMemoryStream
единственное, что подойдет, - это запретить вам читать / писать в него. Итак, ваша текущая реализация работает нормально. - person Magnus   schedule 10.01.2012