我正在寻找一种处理一系列对象的好方法,所以如果我在底层流中使用using语句来创建附件,那么问题出现在GetMessage中...当我去发送方法1时邮件消息附件流被丢弃并将收到错误。如果我取消使用的语句,它可以找到,但我还没有正确处理DataStream Dest。我最初的方法是向方法一添加一个参数List,我可以在每次调用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;
}
}
要将send移动到GetMessage,我必须更改所有其他对象上的所有其他对象实现。我宁愿让发送消息处理newtype5的处理,因为从批处理它可以被调用500次。这是否使示例更加清晰。发送消息已经编写实现,是针对具有GetMessage实现的其他几个对象实现的。我恰好使用了一个流,在发送之前我无法处理流。
答案 0 :(得分:1)
我建议您在Method2中执行MailMessage.Send;使用你给出的代码似乎没有任何理由在调用方法中这样做。
答案 1 :(得分: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()方法是异步的吗?你想并行化发送吗?