使用.Net Mail Attachment时配置MemoryStream

时间:2012-01-24 06:34:51

标签: c# .net idisposable memorystream using-statement

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

是否有一种很好的方法来迭代和附加文件,但同时正确处理我用来附加的MemoryStream?当我在使用smtp之前尝试刷新/关闭时。通过一个错误声明流已经关闭。

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:3)

您可以迭代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

答案 1 :(得分:2)

我知道这是旧帖子,但事实证明,处理MailMessage或将其封闭在using语句中就足够了,因为MailMessage处置时所有AttachmentCollection都是Attachment也处置Stream时,using(MailMessage mail = new MailMessage()) { // Add attachments without worring about disposing them } 也被处理掉。查看ReferenceSource以获取完整代码。

mvn clean dependency:tree
# or (mvn 3)
mvn clean org.apache.maven.plugins:maven-dependency-plugin:3.0.1:tree

答案 2 :(得分:0)

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