2011-07-28 210 views
1

所以這是我的問題。我有我的電子郵件應用程序發送電子郵件,在發送結束時,我已將它的消息狀態寫入富文本框。這裏是probelm。假設我發送了10封電子郵件,richtext框在每次迭代時都不更新。當所有10封電子郵件都發送完畢後,該框會隨發送的消息一起更新。看起來應用程序在通過四個循環時被凍結。寫入富文本框。

for (int count = 0; count < numEmailToSend; count++) 
      { 
       System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(); 
       if (typeSelectedItem == "text/html") { message.IsBodyHtml = true; } 
       if (typeSelectedItem == "text/plain") { message.IsBodyHtml = false; } 

       message.To.Add(emailAddress); 

       if (txtCC.Text != "") 
       {message.CC.Add(txtCC.Text);} 
       if (txtBCC.Text != "") 
       {message.Bcc.Add(txtBCC.Text);} 

       message.Subject = subject; 
       message.From = new System.Net.Mail.MailAddress(emailSender); 
       message.Body = body; 
       System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(server); 
       rtbStatus.Text = rtbStatus.Text + "Starting to Send Message\r\n"; 
       Thread.Sleep(avgDelay * 1000); 
       //smtp.Send(message); 
       smtp.SendAsync(message,1); 
       rtbStatus.Text = rtbStatus.Text + "Message Sent\r\n"; 
      } 

任何想法?

回答

3

你是對的。
當您的代碼在UI線程中運行時,UI無法更新。

您應該在後臺線程上運行您的代碼。
您可以使用BackgroundWorker組件使這更簡單。

請注意,您無法從後臺線程與UI交互;要更新文本框,您應該使用更新文本的匿名方法或使用BackgroundWorker的內置進度報告功能調用BeginInvoke

+0

得到任何鏈接如何這一切工作? – Andy12

+1

_what_是如何工作的? – SLaks