【发布时间】:2011-03-20 12:20:52
【问题描述】:
我对下面的代码有疑问。邮件以重复的字符串 s 内容发送。为什么会这样?
static void Main(string[] args)
{
List<String> liste = new List<String>();
liste.Add("1");
liste.Add("2");
liste.Add("3");
liste.Add("4");
liste.Add("5");
liste.Add("6");
foreach(string s in liste)
new Thread(x => SendMail(s)).Start();
}
static void SendMail(string s)
{
MailMessage mailMsg = new MailMessage("from", "to");
mailMsg.Body = s;
mailMsg.Subject = s;
SmtpClient smtpClient = new SmtpClient("mySMTP");
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new NetworkCredential("myUse", "myPass");
smtpClient.EnableSsl = true;
try
{
smtpClient.Send(mailMsg);
}
catch (SmtpException ex)
{
Console.WriteLine(ex.Message);
}
}
【问题讨论】:
-
您使用的是哪个版本的 .Net?
-
你的意思是对于每一个邮件正文,字符串的值出现两次?即体内的“11”、“22”、“33”等?
-
只用
liste.AsParallel().ForAll(SendMail);替换foreach循环会发生什么? -
@Peter:不,我的意思是我收到的邮件具有相同的邮件标题和正文,例如第一次收到的邮件的标题:1,第二次收到的邮件的标题:1。@Nick:是的,有效。但是为什么会这样呢?
标签: c# .net multithreading smtp