1

我想將行添加到RichTextBox中,行將具有不同的顏色,具體取決於行是否有「錯誤」字。通過BackgroundWorker將行添加到RichtextBox

所以。

我有應該在RichTextBox中顯示的文本文件(大小> 10 Mb)。我有一個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。

如何通過BackgroundWorker向RichTextBox添加字符串?並沒有顯示btn_save。爲什麼?

回答

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修改。

+0

它適用於小文件(200行)。但是,當我嘗試向RichTextBox插入80000行時,UI停止。如何更新UI而不停止? – StepUp

+0

結果與UI的所有操作一樣由更新UI的線程執行。所以當我有大文件時,我的UI會停下來。 – StepUp

相關問題