从BackgroundWorker,.NET 3.5检索结果时,防止UI滞后

时间:2012-02-24 20:53:33

标签: .net user-interface backgroundworker

寻找其他一些关于这个原因的想法,我无法想出任何聪明的东西。

我有一个日志文件,我允许用户通过字符串匹配进行搜索。据推测,这个日志文件可能会变得很大,所以我决定在BackgroundWorker上运行搜索并将匹配字符串数组返回到主UI上的RichTextBox。

我将我的日志记录了一百万行并让它撕裂。起初,我认为我的线程实际上并没有执行主进程,但后来我意识到搜索操作速度非常快,并且正在更新需要10多秒才能执行的GUI:

if ( e->Error != nullptr )
      {
         MessageBox::Show( e->Error->Message );
      }
      else
      if ( e->Cancelled )
      {

      }
      else
      {
          try
          {
             // This is the line that kills me
             log_textBox->Lines = dynamic_cast<array<String^>^>(e->Result);
             if(log_textBox->Lines->Length == 0)
                  log_textBox->Text = "No Matches Found.";
          }
          catch(Exception^ e)
          {

          }
      }

将结果数组加载到文本框中就是冻结我的UI。无论如何都有可能用大量数据更新UI而不会被锁定?

1 个答案:

答案 0 :(得分:0)

Textbox类不适用于显示大量数据(请查看记事本)。

您是否考虑过在VirtualMode中使用ListView?