通过BackgroundWorker向RichtextBox添加行



我想添加行到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修改

最新更新