【发布时间】: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