PDA

View Full Version : حرفه ای: جلوگیری از هنگ کردن برنامه هنگام ارسال ایمیل



Pedram_Parsian
سه شنبه 27 خرداد 1393, 21:07 عصر
دوستان من از این کد برای ارسال ایمیل استفاده می کنم :

try
{
string email = "************";
System.Net.Mail.MailMessage ms = new System.Net.Mail.MailMessage();
ms.From = new System.Net.Mail.MailAddress(email);
ms.To.Add(email);
ms.Subject = "*******";
string Type = "*****";
string CM = "********";
ms.Body = Type + "\n" + CM + "\n" + QuestionText_Q.Text + "\n" + CM;
System.Net.Mail.SmtpClient sm = new System.Net.Mail.SmtpClient("plus.smtp.mail.yahoo.com")
{
Credentials = new NetworkCredential(email, "*********"),
EnableSsl = true
};
sm.Send(ms);
}
catch (Exception ex)
{

}
finally
{
OK_Question.Text = "سوال شما با موفقیت ارسال شد.";
Error_Question.Text = "";
}

هیچ مشکلی هم نداره
فقط وقتی روی دکمه کلید می کنم ، یه مدت زمان نسبتا کوتاهی برنامه حدودا هنگ میکنه و نمیشه کار های دیگه رو توی برنامه انجام داد !
چی کار کنم که این حالت پیش نیاد ؟
با تشکر

Sir-Programmer
سه شنبه 27 خرداد 1393, 21:19 عصر
سلام دوست عزیز باید از Thread یا Background Worker استفاده کنی منم برای ساخت ایمیل بُمبر با همین مشکل برخوردم که با ترد حل شد برای دانلود سورس کلیک کنید (http://emsoft.ir/%D8%AF%D9%88-%D8%B3%D9%88%D8%B1%D8%B3-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86-%D8%A7%DB%8C%D9%85%DB%8C%D9%84-%D8%A8%D9%8F%D9%85%D8%A8%D8%B1-%D9%88-%D8%A2%D8%AF%D8%B1%D8%B3-%DB%8C%D8%A7%D8%A8-%D8%B3%D8%A7/)
اینم کد ارسال ایمیل با ترد :
Thread thsend;
private void sendmail()
{
Thread.Sleep(1);
try
{
MailMessage msg = new MailMessage(new MailAddress(lblUser2.Text), new MailAddress(textBox1.Text)); // Create a MailMessage object with a from and to address
msg.Subject = textBox2.Text;
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = textBox3.Text;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = false;
SmtpClient client = new SmtpClient(SmtpServer.Text, 587);
client.Credentials = new NetworkCredential(lblUser2.Text, lblPass2.Text);
client.EnableSsl = false;
try
{
client.Send(msg);
c1 = c1 + 1;
lblc1.Text = c1.ToString();
}
catch (SmtpException ex)
{
}
}
catch
{

}
}

اینم تو یه دکمه بزار
thsend = new Thread(sendmail);
thsend.Start();

Pedram_Parsian
سه شنبه 27 خرداد 1393, 21:49 عصر
سلام دوست عزیز باید از Thread یا Background Worker استفاده کنی منم برای ساخت ایمیل بُمبر با همین مشکل برخوردم که با ترد حل شد برای دانلود سورس کلیک کنید (http://emsoft.ir/%D8%AF%D9%88-%D8%B3%D9%88%D8%B1%D8%B3-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86-%D8%A7%DB%8C%D9%85%DB%8C%D9%84-%D8%A8%D9%8F%D9%85%D8%A8%D8%B1-%D9%88-%D8%A2%D8%AF%D8%B1%D8%B3-%DB%8C%D8%A7%D8%A8-%D8%B3%D8%A7/)
اینم کد ارسال ایمیل با ترد :
Thread thsend;
private void sendmail()
{
Thread.Sleep(1);
try
{
MailMessage msg = new MailMessage(new MailAddress(lblUser2.Text), new MailAddress(textBox1.Text)); // Create a MailMessage object with a from and to address
msg.Subject = textBox2.Text;
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = textBox3.Text;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = false;
SmtpClient client = new SmtpClient(SmtpServer.Text, 587);
client.Credentials = new NetworkCredential(lblUser2.Text, lblPass2.Text);
client.EnableSsl = false;
try
{
client.Send(msg);
c1 = c1 + 1;
lblc1.Text = c1.ToString();
}
catch (SmtpException ex)
{
}
}
catch
{

}
}

اینم تو یه دکمه بزار
thsend = new Thread(sendmail);
thsend.Start();

دوست عزیز
اگه من از کد خودم استفاده کنم و فقط بخش هایی رو که Thread داره رو به کدم اضافه کنم به مشکل برنمی خورم ؟
با تشکر

keyone72
سه شنبه 27 خرداد 1393, 22:05 عصر
بهتره از Background Worker استفاده کنی

private void MainMenu_Load(object sender, EventArgs e)
{

if (!backgroundWorker2.IsBusy)
{
backgroundWorker2.RunWorkerAsync();
}

}

............................................


private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
try
{
"Your Code Here"
}
catch (Exception ex)
{
}
}

Sir-Programmer
سه شنبه 27 خرداد 1393, 22:35 عصر
دوست عزیز
اگه من از کد خودم استفاده کنم و فقط بخش هایی رو که Thread داره رو به کدم اضافه کنم به مشکل برنمی خورم ؟
با تشکر

نه دوست عزیز به مشکلم بر خوردی اینجا بزار راهنمایی می کنم

Hadoop
چهارشنبه 28 خرداد 1393, 05:40 صبح
Thread توی دات نت جدید obsolete شده.
بجاش


Task.Factory.StartNew ( () => {
SendMailMethod();
});