我想添加行到RichTextBox,这将有不同的颜色取决于一行是否有"错误"字。
。
我有文本文件(大小>10 Mb),应该在RichTextBox中显示。我有一个ValidationMethod,它在未验证的文本文件的每行末尾添加一个单词"Error"。
我有一个BackgroundWorker的处理程序。DoWork调用ValidationMethod:
void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = ValidationMethod(fileName);
}
和ValidationMethod是:
void ValidationMethod(string fileName)
{
//It is really huge file. So a program can be hung
if (str.Contains("Error"))
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.AppendText(str + "n");
}
else
{
richTextBox1.AppendText(str + "n");
}
btn_save.Visible = true;
}
有时它工作正常,有时我的程序挂起。我想突出显示的RichTextBox的红色行没有验证。如果我通过UI线程更新我的richtextbox,那么程序就会停止。所以我决定通过BackgroundWorker更新我的RichTextBox。
如何添加字符串到RichTextBox的BackgroundWorker?btn_save没有显示。为什么?
对于BackgroundWorker,一个实用的方法是使用ProgressChanged事件:
private void backgroundWorker1_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
//works with the UI
}
in the DoWork:
void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
var res = ValidationMethod(fileName);
ReportProgress(...);
}
使用一些成员交换状态。另一个解决方案是使用Control。调用在UI线程中调用UI修改