【发布时间】:2011-02-16 09:20:33
【问题描述】:
VS 2010 代码分析报告如下:
警告 4 CA2000:Microsoft.Reliability:在方法“Mailer.SendMessage()”中,对象“client”并未沿所有异常路径进行处理。在对对象“客户端”的所有引用超出范围之前调用 System.IDisposable.Dispose。
我的代码是:
public void SendMessage()
{
SmtpClient client = new SmtpClient();
client.Send(Message);
client.Dispose();
DisposeAttachments();
}
我应该如何正确处置客户?
更新:回答 Jons 的问题,这里是处理附件功能:
private void DisposeAttachments()
{
foreach (Attachment attachment in Message.Attachments)
{
attachment.Dispose();
}
Message.Attachments.Dispose();
Message = null;
}
上次更新完整的课程列表(简短)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
public class Mailer
{
public MailMessage Message
{
get;
set;
}
public Mailer(MailMessage message)
{
this.Message = message;
}
public void SendMessage()
{
using (SmtpClient client = new SmtpClient())
{
client.Send(Message);
}
DisposeAttachments();
}
private void DisposeAttachments()
{
foreach (Attachment attachment in Message.Attachments)
{
attachment.Dispose();
}
Message.Attachments.Dispose();
Message = null;
}
}
【问题讨论】:
-
@JL - 而不是手动处理附件,您应该处理邮件本身,它会处理附件、备用视图和其他部分。
-
正确,但在旧版本中(.net 4.0 之前)SmtpClient 没有实现 Dispose 方法