es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Reutilización de flujos de memoria. Imágenes adjuntas.

Estaba tratando de enviar un gráfico directamente desde mi ventana de Windows al cuerpo del correo.
Aquí, enlazo “runtimeImage.png” con MemoryStream.

System.Net.Mail.Attachment _ms1 = new System.Net.Mail.Attachment(Attachments(Data[i][4].ToString()), "runtimeImage.png");
mail.Attachments.Add(_ms1);
mail.Body += "<img src='runtimeImage.png'>";

Aquí convierto el gráfico a una imagen y creo un MemoryStream.

private MemoryStream Attachments(string type)
{
    getChartData(type);
    byte[] bytes = null;
    using (MemoryStream memoryStream = new MemoryStream())
    {
        chart.SaveImage(memoryStream, ChartImageFormat.Png);
        bytes = memoryStream.ToArray();
    }
    return new MemoryStream(bytes);
}

Pero cada vez que envío el correo, solo la primera imagen se incluye en el cuerpo del correo y la imagen no cambia. ¿Cómo puedo limpiar y reutilizar MemoryStream?

Nota: Soy nuevo en el desarrollo (graduado reciente) y lo estoy haciendo por curiosidad.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para limpiar y reutilizar el MemoryStream, simplemente puedes llamar al método MemoryStream.SetLength(0) antes de escribir nuevos datos en él. Esto restablecerá el MemoryStream a su estado inicial y eliminará cualquier dato anterior.

    Aquí tienes cómo puedes modificar tu método Attachments para limpiar y reutilizar el MemoryStream:

    private MemoryStream Attachments(string tipo)
    {
        getChartData(tipo);
        using (MemoryStream memoryStream = new MemoryStream())
        {
            chart.SaveImage(memoryStream, ChartImageFormat.Png);
            byte[] bytes = memoryStream.ToArray();
    
            // Restablece el MemoryStream para eliminar cualquier dato anterior
            memoryStream.SetLength(0);
            memoryStream.Write(bytes, 0, bytes.Length);
            memoryStream.Position = 0; // Restablece la posición al inicio
    
            return memoryStream;
        }
    }
    

    Al restablecer el MemoryStream antes de cada uso, deberías poder enviar varios gráficos en el mismo cuerpo de correo electrónico sin problemas.

Comments are closed.