在不使用Thread.Sleep c#的情况下延迟发送电子邮件

时间:2012-10-01 15:03:46

标签: c#

我有一个for循环,循环并每个循环发送一封电子邮件。现在我正在使用thread.sleep()但我希望用户仍然能够与程序进行交互,只需删除一个循环。是否可以在不使用thread.sleep的情况下执行此操作?

4 个答案:

答案 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)

尝试将代码转移到后台线程。