我有一个多线程应用程序,richtextbox
从另一个thread
更新,而不是在Form1
上创建的delegate void SetTextCallback(string text);
public static void SetText(String text)
{
if (Form1.myform.richtextbox.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
Form1.myform.richtextbox.Invoke(d, new object[] { text });
}
else
{
Form1.myform.richtextbox.AppendText(text);
}
}
所以我使用了委托技巧:
text
问题:如何为此gather_ranks
着色?
答案 0 :(得分:0)
在您附加文本以选择它之后,您必须在RichTextBox上使用Select Method(使用TextLenght查找要选择的范围)。然后,您可以使用SelectionColor Property更改颜色。
当然这应该在UI线程上完成。
public void SetText(string text, Color color)
{
if (this.RichTextBox1.InvokeRequired) {
SetTextCallBack d = new SetTextCallBack(SetText);
this.Invoke(d, {
text,
color
});
} else {
int length = this.RichTextBox1.TextLength;
this.RichTextBox1.AppendText(text);
this.RichTextBox1.Select(length, text.Length);
this.RichTextBox1.SelectionColor = color;
}
}
我已经使用这些虚拟任务来测试它。
private void StartServer
{
Task y = new Task(() => this.SetText("Yellow Text", Color.Yellow));
Task z = new Task(() => this.SetText("Red Text", Color.Red));
y.Start();
z.Start();
}