【问题标题】:Adding rows to RichtextBox by BackgroundWorker通过 BackgroundWorker 向 RichtextBox 添加行
【发布时间】:2014-08-24 16:07:08
【问题描述】:

我想向 RichTextBox 添加行,这将根据行是否有“错误”字样而具有不同的颜色。

所以。

我有应该在 RichTextBox 中显示的文本文件(大小>10 Mb)。我有一个 ValidationMethod,它在未验证的文本文件的每一行末尾添加一个单词“错误”。这工作正常。

我有一个调用 ValidationMethod 的 BackgroundWorker.DoWork 处理程序:

    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 线程更新我的富文本框,那么程序就会停止。所以我决定通过 BackgroundWorker 更新我的 RichTextBox。

BackgroundWorker如何给RichTextBox添加字符串?并且 btn_save 没有显示。为什么?

【问题讨论】:

    标签: multithreading winforms user-interface richtextbox backgroundworker


    【解决方案1】:

    使用 BackgroundWorker,一种实用的方法是使用 ProgressChanged 事件:

    private void backgroundWorker1_ProgressChanged(object sender,
        ProgressChangedEventArgs e)
    {
        //works with the UI
    }
    

    在DoWork中:

    void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {         
            var res = ValidationMethod(fileName);
            ReportProgress(...);
        }
    

    使用一些会员交换身份。 另一种解决方案是使用Control.Invoke在UI线程中调用UI修改。

    【讨论】:

    • 它适用于小文件(200 行)。但是当我尝试将 80000 行插入 RichTextBox 时,UI 会停止。如何在不停止的情况下更新 UI?
    • 结果是一样的,UI的所有操作都是由更新UI的线程执行的。所以当我有大文件时,我的 UI 会停止。
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    相关资源
    最近更新 更多