我做了一个小程序,基本上可以通过 yahoo smtp 服务器发送电子邮件。我的代码:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Net;
using System.Net.Mail;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
MailMessage message = new MailMessage();
message.From = new MailAddress("myid@yahoo.com");
message.To.Add("anotherid@yahoo.com");
message.Subject = "afdasdfasfg";
message.Body = "Hgfk4564267862738I";
message.IsBodyHtml = true;
message.Priority = MailPriority.High;
SmtpClient sC = new SmtpClient("smtp.mail.yahoo.com");
sC.Port = 587;
sC.Credentials = new NetworkCredential("myid", "mypassword");
//sC.EnableSsl = true;
sC.Send(message);
MessageBox .Show ("Mail Send Successfully");
}
catch (Exception ex)
{
MessageBox .Show (ex + "Mail Sending Fail's") ;
}
}
}
}
奇怪的是,它在第一周就奏效了。我可以毫无问题地发送消息。然后就在昨天,程序刚刚开始冻结并且没有响应(我没有更改代码)。为什么会这样?如何修改我的程序?
编辑:@Andreas Niedermair 现在我刚刚尝试了该程序并将其放置了一分钟,然后显示错误:检测到 ContextSwitchDeadlock 消息:CLR 无法从 COM 上下文 0x21eb78 转换到 COM 上下文 0x21ece8 60 秒。拥有目标上下文/单元的线程很可能要么进行非泵送等待,要么处理非常长时间运行的操作而不泵送 Windows 消息。这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随着时间的推移不断累积。为避免此问题,所有单线程单元 (STA) 线程都应使用泵送等待原语(例如 CoWaitForMultipleHandles)并在长时间运行的操作期间定期泵送消息。
谢谢你的帮助!