我有一个for循环,循环并每个循环发送一封电子邮件。现在我正在使用thread.sleep()但我希望用户仍然能够与程序进行交互,只需删除一个循环。是否可以在不使用thread.sleep的情况下执行此操作?
答案 0 :(得分:1)
您是否在UI线程上运行循环?如果是这样,只需使用Task.Factory.StartNew在不同的线程中运行您的循环。如果您需要延迟当时发送的电子邮件,请在实际开始循环之前插入Thread.Sleep。
看起来像这样:
private void OnButtonClick(object sender, EventArgs e)
{
//This code happens on the UI thread
Task.Factory.StartNew(SendEmails);
}
private void SendEmails()
{
Thread.Sleep(500);
foreach(var email in emailAddresses) {
SendEmail(email);
}
}
答案 1 :(得分:0)
您需要将发送邮件的方法放在单独的线程中,以保持GUI的交互。
Thread newThread = new Thread(new ThreadStart(SendMail));
newThread.Start();
public void SendMail()
{
//Send mails here
}
答案 2 :(得分:0)
您可以分拆新线程以发送电子邮件,这样就不会锁定UI线程。
答案 3 :(得分:0)
尝试将代码转移到后台线程。