繁体   English   中英

与.Net Mail附件一起使用时,处置MemoryStream

[英]Dispose MemoryStream when using with .Net Mail Attachment

我正在使用MemoryStream从存储在数据库中的二进制文件中添加附件。 我的问题是我想正确处理MemoryStream。 使用“ using”语句很容易做到这一点,但是当我有多个附件时,我不知道如何正确处理多个MemoryStreams。

有没有很好的方法来遍历和附加文件,但是同时正确处理了我要附加的MemoryStreams? 当我尝试在使用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语句确保即使在调用对象的方法时发生异常,也将调用Dispose。 通过将对象放在try块中,然后在finally块中调用Dispose,可以达到相同的结果。 实际上,这就是编译器翻译using语句的方式。

MSDN

using (var ms1 = new MemoryStream())
  using (var ms2 = new MemoryStream())
  {
    ...
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM