与.Net邮件附件一起使用时,请处理MemoryStream
本文关键字:处理 MemoryStream Net 一起 | 更新日期: 2023-09-27 18:21:09
我正在使用MemoryStream从存储在DB中的二进制文件中添加附件。我的问题是我想正确地处理MemoryStream。使用"using"语句很容易做到这一点,但当我有多个附件时,我不知道如何正确处理多个MemoryStream。
有没有一种好的方法可以迭代和附加文件,但同时正确地处理我用来附加的MemoryStream?当我在使用smtp之前尝试刷新/关闭时。通过一个错误发送它,声明流已经关闭。
如有任何建议,我们将不胜感激。
我知道这是一篇老文章,但事实证明,处理MailMessage
或将其封装在using
语句中就足够了,因为当处理MailMessage
时,所有AttachmentCollection
也被处理,当处理Attachment
时,Stream
也被处理。查看ReferenceSource以获取完整的代码。
using(MailMessage mail = new MailMessage())
{
// Add attachments without worring about disposing them
}
您可以迭代MemoryStream
并处理它们。将处置代码放入finally
块等于using
语句。
var list = new List<MemoryStream>(){new MemoryStream(), new MemoryStream()};
try
{
//....
}
finally
{
foreach (var x in list)
{
x.Dispose();
}
}
using语句确保即使在对象上调用方法时发生异常。你可以通过将对象放入try块中并然后在finally块中调用Dispose;事实上using语句由编译器翻译。
来自MSDN
using (var ms1 = new MemoryStream())
using (var ms2 = new MemoryStream())
{
...
}