110,533
社区成员
发帖
与我相关
我的任务
分享
public delegate string validateDele(string stremail, out string strReslut);
public FrmMain()
{
InitializeComponent();
threadvalidate = new Thread(new ThreadStart(DoValidate));
}
private void FrmMain_Load(object sender, EventArgs e)
{
threadvalidate.Start();
}
private void DoValidate()
{
while(blRunState)
{
DoingNow = "Task Started";
System.Threading.Thread.Sleep(100);
try
{
DataUtility db = new DataUtility(strConn);
String strsqlGetServer = "select * from EM_order by ItemID desc";
DataTable tbServers = db.GetDataTable(strsqlGetServer);
string strSql = "";
DataTable dt = db.GetDataTable(strSql);
MailChecker.MailChecker checker = new MailChecker.MailChecker();
validateDele validateemail = new validateDele(DoSingleVlidate);
for (int i = 0; i < dt.Rows.Count; i++)
{
string strEmail = dt.Rows[i]["Email_varchar"].ToString().Trim();
string emailID = dt.Rows[i]["MemberID_int"].ToString();
if (dt.Rows[i]["ReMark"].ToString().Trim() == "CantValidateByCom")
{
string strUpdateSqlCanot = "Update set ReMark='CantValidateByCom',Enable_tinyint=0 where Email_varchar=dbo.f_encryptEmail('" + strEmail + "')";
db.ExecSQL(strUpdateSqlCanot);
continue;
}
string strMailServer = strEmail.Substring(strEmail.IndexOf("@") + 1, strEmail.Length - strEmail.IndexOf("@") - 1);
bool isCanNotValidate = false;
for (int j = 0; j < tbServers.Rows.Count; j++)
{
if (strMailServer.ToLower() == tbServers.Rows[j]["MailServerName"].ToString().Trim().ToLower())
{
isCanNotValidate = true;
string strUpdateSqlCanot = "Update set ReMark='CantValidateByCom',Enable_tinyint=0 where Email_varchar=dbo.f_encryptEmail('" + strEmail + "')";
db.ExecSQL(strUpdateSqlCanot);
break;
}
}
if (isCanNotValidate == true)
{
intHadValidateMaxID = int.Parse(emailID);
inthaveValidateCount++;
intBadEmailCount++;
continue;
}
DoingNow = "validating " + strEmail;
try
{
string reslsut = "";
IAsyncResult iAR = validateemail.BeginInvoke(strEmail, out reslsut, null, null); //异步
在这儿就阻塞了,可能几分钟都不不返回值,试着10S后如果还没有返回值的话就强制终止
Thread.Sleep(10000);
if (!iAR.IsCompleted)
{
validateemail.EndInvoke(out reslsut, iAR);
}
// System.Threading.Thread.Sleep(300);
DoingNow = strEmail + " Validated Result: " + reslsut;
if (reslsut != null && reslsut != "" && reslsut.Substring(0, 2).ToLower() == "ok")
{
string strUpdateSql = "Update set Enable_tinyint=1 where Email_varchar=dbo.f_encryptEmail('" + strEmail + "')";
db.ExecSQL(strUpdateSql);
intHadValidateMaxID = int.Parse(emailID);
inthaveValidateCount++;
}
else
{
string strUpdateSql = "Update set Enable_tinyint=0,ReMark='Validate Failed' where Email_varchar=dbo.f_encryptEmail('" + strEmail + "')";
db.ExecSQL(strUpdateSql);
intHadValidateMaxID = int.Parse(emailID);
inthaveValidateCount++;
intBadEmailCount++;
}
}
catch (Exception ee)
{
//System.Windows.Forms.MessageBox.Show("发现错误,\n" + ee.Message + "\n" + ee.Source, "Runtime Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
continue;
}
}
DoingNow = "Task Stoped";
}
catch (Exception ee)
{
// System.Windows.Forms.MessageBox.Show("发现错误,\n" + ee.Message + "\n" + ee.Source, "Runtime Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
DoingNow = ee.Message;
}
finally
{
SetStatus();
DoingNow = "Task Stoped";
}
}
}
public static string DoSingleVlidate(string strEmail,out string strReslut)
{
MailChecker.MailChecker checker = new MailChecker.MailChecker();
try
{
strReslut = checker.CheckEmail(strEmail, strDNS);
}
catch (Exception ee)
{
strReslut = ee.Message;
}
return strReslut;
}