您遇到的问题不在于附加文本,
richTextBox1.AppendText(c.ToString()); //Good
按预期工作,但问题是您让 UI 线程进入睡眠状态,阻止在富文本框中绘制文本。
Thread.Sleep(100); //Not so good
一个快速的解决方法是添加
richTextBox1.Refresh();
这会强制在附加文本后重新绘制控件,但请注意,当线程休眠时,您的整个 UI 仍将被冻结。更好的解决方案可能是使用 aSystem.Windows.Forms.Timer
来实现您的目标。此类每隔指定的时间间隔触发一个事件。一些快速代码,
private System.Windows.Forms.Timer TextUpdateTimer = new System.Windows.Forms.Timer();
private string MyString = "This is a test string to stylize your RichTextBox1";
private int TextUpdateCount = 0;
private void button1_Click(object sender, EventArgs e)
{
//Sets the interval for firing the "Timer.Tick" Event
TextUpdateTimer.Interval = 100;
TextUpdateTimer.Tick += new EventHandler(TextUpdateTimer_Tick);
TextUpdateCount = 0;
TextUpdateTimer.Start();
}
private void TextUpdateTimer_Tick(object sender, EventArgs e)
{
//Stop timer if reached the end of the string
if(TextUpdateCount == MyString.Length) {
TextUpdateTimer.Stop();
return;
}
//AppendText method should work as expected
richTextBox1.AppendText(MyString[TextUpdateCount].ToString());
TextUpdateCount++;
}
这会在不阻塞主线程的情况下逐个字符地更新文本框,并保持前端的可用性。