【问题标题】:Preventing UI lag when retrieving results from BackgroundWorker, .NET 3.5从 BackgroundWorker、.NET 3.5 检索结果时防止 UI 滞后
【发布时间】:2012-02-25 04:56:17
【问题描述】:

寻找其他关于这个原因的想法,我想不出任何聪明的办法。

我有一个日志文件,让用户可以通过字符串匹配进行搜索。据推测,这个日志文件可能会变得很大,所以我决定在 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 而不会看起来被锁定?

【问题讨论】:

    标签: .net user-interface backgroundworker


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      • 2011-05-25
      • 2013-06-25
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      相关资源
      最近更新 更多