2012-10-01 97 views
0

我有一個for循環循環,併發送一個電子郵件每個循環。現在即時通訊使用thread.sleep(),但我希望用戶仍然能夠與程序進行交互,只需一個循環即可。有沒有可能做到這一點,而不使用thread.sleep?延遲不使用Thread.Sleep的電子郵件的發送c#

+0

移動循環到後臺線程。如果電子郵件發送必須位於主/ GUI線程上,請將實際發送提升至主線程,但將睡眠狀態移至後臺線程。 –

+0

是否需要在每個循環迭代中發送電子郵件?或者在完成循環後發送一個(或多個)就足夠了嗎? –

+0

不知道爲什麼有人還沒有問這個問題,但是......爲什麼你延遲發送? – James

回答

0

您需要將分隔線程中的郵件發送方法保持爲GUI交互。

Thread newThread = new Thread(new ThreadStart(SendMail)); 
newThread.Start(); 

public void SendMail() 
{ 
    //Send mails here  
} 
0

你可以分離一個新的線程發送電子郵件,所以你不鎖定UI線程。

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); 
    } 
} 
+0

這個方法似乎並不想工作,因爲我不使用System方法發送電子郵件。我使用模板電子郵件通過Outlook發送它們。 – Stonep123

+0

請告訴我更多。我不確定爲什麼確切的方法會改變結果? – theMayer