我有一个 for 循环,它循环并在每个循环中发送一封电子邮件。现在我正在使用 thread.sleep() 但我希望用户仍然能够与程序进行交互,只需 delap 那个循环。是否可以在不使用 thread.sleep 的情况下做到这一点?
问问题
1022 次
4 回答
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);
}
}
于 2012-10-01T15:07:01.743 回答
0
您需要将发送邮件的方法放在单独的线程中以保持您的 GUI 交互。
Thread newThread = new Thread(new ThreadStart(SendMail));
newThread.Start();
public void SendMail()
{
//Send mails here
}
于 2012-10-01T15:05:51.033 回答
0
您可以分拆一个新线程来发送电子邮件,这样您就不会锁定 UI 线程。
于 2012-10-01T15:06:04.033 回答
0
尝试将代码转移到后台线程。
于 2012-10-01T15:06:35.597 回答