C# 我已经在一个循环中设置了这个函数,但问题只是第一次工作 private static void SendMailTest() { var dto=qEmail.Dequeue(); 如果(dto.Attachment!=null&&dto.Attachment.Length>0) { for(int i=0;i

C# 我已经在一个循环中设置了这个函数,但问题只是第一次工作 private static void SendMailTest() { var dto=qEmail.Dequeue(); 如果(dto.Attachment!=null&&dto.Attachment.Length>0) { for(int i=0;i,c#,C#,第二次不工作不在dto.Attachment[i].ContentStream.CopyTo(ms)中复制 我不知道这是否是您的问题,但我记得当附件是由某些类型的软件生成的PDF时,出现了一个问题,该软件不喜欢MemoryStream(出于一个我从未理解的原因——如果我记得正确的话,它涉及到Crystal Reports的更高版本)。然而,我发现它就像一条小溪一样运作良好。因此,我建议您尝试以下方式: private static void SendMailTest() { var dt

第二次不工作不在dto.Attachment[i].ContentStream.CopyTo(ms)中复制

我不知道这是否是您的问题,但我记得当附件是由某些类型的软件生成的PDF时,出现了一个问题,该软件不喜欢MemoryStream(出于一个我从未理解的原因——如果我记得正确的话,它涉及到Crystal Reports的更高版本)。然而,我发现它就像一条小溪一样运作良好。因此,我建议您尝试以下方式:

private static void SendMailTest()
{
    var dto = qEmail.Dequeue();    
    if (dto.Attachment != null && dto.Attachment.Length > 0)
    {
        for (int i = 0; i < dto.Attachment.Length; i++)
         {
            if (dto.Attachment[i] != null)
              {
                 MemoryStream ms = new MemoryStream();
                 dto.Attachment[i].ContentStream.CopyTo(ms);                    
                 byte[] byteArr = ms.ToArray();
                 ms.Flush();
                  ms.Dispose();
              }
          }
      }
 }

这是我最后的选择,取决于准确报告的长度。但总比什么都没有好

不工作是什么意思?你有例外吗?
MemoryStream
是否为空?QUE是否有多个元素?请使用调试程序逐步检查,具体错误是什么。yes MemoryStream EmptyTo.Attachment[i].ContentStream.CopyTo(ms);第一次附件数据复制到ms相同功能调用第二次不工作
using (BinaryReader br = new BinaryReader(dto.Attachment[i].ContentStream))
{
    byteArr = br.ReadBytes((int)dto.Attachment[i].ContentStream.Length);
}