写入富文本框
本文关键字:文本 | 更新日期: 2023-09-27 18:03:57
这是我的问题。我让我的电子邮件应用程序发送电子邮件,在发送结束时,我让它将消息的状态写入富文本框。问题就在这里。假设我发了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";
}
任何想法?
你是对的。
当你的代码在UI线程中运行时,UI无法更新。
你应该在后台线程中运行你的代码。
您可以使用BackgroundWorker
组件来简化此操作。
注意,你不能从后台线程与UI交互;要更新文本框,你应该调用BeginInvoke
的匿名方法来更新文本,或者使用BackgroundWorker的内置进度报告功能。