寻找其他一些关于这个原因的想法,我无法想出任何聪明的东西。
我有一个日志文件,我允许用户通过字符串匹配进行搜索。据推测,这个日志文件可能会变得很大,所以我决定在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而不会被锁定?
答案 0 :(得分:0)
Textbox类不适用于显示大量数据(请查看记事本)。
您是否考虑过在VirtualMode中使用ListView?