0

我正在寻找一种处理一系列对象的好方法,所以问题出在 GetMessage 中,如果我使用底层流的 using 语句来创建附件...在方法 1 中,当我去发送邮件消息时附件的流已被处理,并将收到错误。如果我取消 using 语句,它可以找到但我没有正确处理 DataStream Dest。我最初的想法是在方法一中添加一个参数列表,每次调用 GetMessage 时我都可以将其添加到 Dest 中,并在方法末尾的方法 1 中通过列表来处理流。SendMessage 可以从批处理过程中循环调用,因此可能会创建许多流,我想将其留给调用者(SendMessage)来处理它们,而不是在 GetMessage 中,因为 SendMessage 是发送发生的地方,我需要确保消息在处理前已发送。有什么建议么???

                void sendMessage(MessageType type){
                   MailMessage m = Method2();
                   switch(type)
                   {
                      case type1:
                        m = Object1().GetMessage(param1)
                      case type2:
                        m = Object2().GetMessage(param1, param2)
                      case type3:
                        m = Object3().GetMessage(param1)
                      case type4:
                        m = Object4().GetMessage(param1, param2, param3)
                      case NewType5:
                        m = NewType5().GetMessage(param1, param2)
                   }
                   // this method does the send cause it has the mailmessage
                   m.Send();
                }

                class NewType5()
                {
                MailMessage GetMessage(){

                    // used to be 
                    // using (var Dest = new DataStream(true)){ .... }
                    DataStream Dest = new DataStream(true);

                    // code that reads info into the stream

                    // Go back to the start of the stream
                    Dest.Position = 0;

                    // Create attachment from the stream
                    Attachment mailattachement = new Attachment(Dest, contentType);

                    //Create our return value
                    var message = new MailMessage();
                    message.To.Add(UserInfo.UserDetail.Email);
                    message.Subject = "P&L Data View - " + DateTime.Now.ToString();
                    message.Attachments.Add(mailattachement);
                    return message;
               }
             }

要将发送移动到 GetMessage,我必须更改所有其他对象上的所有其他对象实现。我宁愿让 send message 处理 newtype5 的处理,因为从批处理过程中它可以被调用 500 次。这是否使示例更加清晰。Send Message 已经被编写了一个实现,针对的是具有 GetMessage 实现的其他几个对象。我的恰好使用了一个流,在发送之前我无法处理流。

4

2 回答 2

1

我建议您在 Method2 中执行 MailMessage.Send;使用您提供的代码,似乎没有任何理由在调用方法中这样做。

于 2012-08-09T13:57:25.387 回答
1

为什么不把它变成 meth2: 的参数?

            void method1(){
               using (var Dest = new DataStream(true))
               {
                   MailMessage m = Method2(Dest);
                   .....
                   m.Send();
               }
            }

            MailMessage Method2(Stream Dest){

                // code that reads info into the stream

                // Go back to the start of the stream
                Dest.Position = 0;

                // Create attachment from the stream
                Attachment mailattachement = new Attachment(Dest, contentType);

                //Create our return value
                var message = new MailMessage();
                message.To.Add(UserInfo.UserDetail.Email);
                message.Subject = "P&L Data View - " + DateTime.Now.ToString();
                message.Attachments.Add(mailattachement);
                return message;
           }

您的 Message.Send() 方法是异步的吗?你想并行发送吗?

于 2012-08-09T14:08:24.233 回答