0

我有一个 for 循环,它循环并在每个循环中发送一封电子邮件。现在我正在使用 thread.sleep() 但我希望用户仍然能够与程序进行交互,只需 delap 那个循环。是否可以在不使用 thread.sleep 的情况下做到这一点?

4

4 回答 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 回答