あなたが抱えている問題は、テキストを追加することではありません、
richTextBox1.AppendText(c.ToString()); //Good
期待どおりに機能しますが、問題は、UIスレッドをスリープ状態にして、リッチテキストボックスへのテキストの描画をブロックしていることです。
Thread.Sleep(100); //Not so good
簡単な回避策は、追加することです
richTextBox1.Refresh();
これにより、テキストを追加した後にコントロールが強制的に再描画されますが、スレッドがスリープしている間、UI全体がフリーズすることに注意してください。より良い解決策は、おそらくSystem.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++;
}
これにより、メインスレッドをブロックすることなくテキストボックスの文字が文字ごとに更新され、フロントエンドでの使いやすさが維持されます。