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");
}
Sono abituato a utilizzare l'istruzione 'using' in combinazione con MemoryStreams. È uno scenario in cui l'istruzione "using" non è necessaria? O è valido chiamare il ritorno all'interno di una dichiarazione 'using'?Un MemoryStream viene eliminato automaticamente quando lo si restituisce come ActionResult?
EDIT:
Per i miei scopi ho trovato che l'introduzione di un 'utilizzando' istruzione non funziona (tiri un ObjectDisposedException). Ecco cosa sto facendo con esso lato client:
$('#ReportTest').bind('load', function() {
$('#LoadingPanel').hide();
$(this).unbind('load');
}).bind('error', function() {
$('#LoadingPanel').hide();
$(this).unbind('error');
}).attr('src', '../../Chart/CustomChart?ReportID=' + settings.id);
E 'sempre una buona idea di utilizzare il 'utilizzando' istruzione quando si tratta di classi che implementano IDisposable, anche se non si crede ASP.NET è andare a pulire dopo di te. –
cosa fa 'File (stream, string)' fare con lo stream? in genere l'oggetto che ha creato lo stream deve anche disporre del flusso. in tal caso sarai responsabile dello smaltimento del flusso. –
@GeorgeStocker si potrebbe chiamare anche il metodo 'Dispose()'? Penserei dopo che 'return' è chiamato non completare il blocco' using'. –