写入富文本框

本文关键字:文本 | 更新日期: 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的内置进度报告功能。