В поисках других мыслей по этому поводу я не мог придумать ничего умного.
У меня есть файл журнала, по которому пользователи могут выполнять поиск по совпадению строк. Предположительно, этот файл журнала может стать огромным, поэтому я решил запустить поиск на BackgroundWorker и вернуть массив совпадающих строк в RichTextBox на моем основном пользовательском интерфейсе.
Я сделал мой журнал около миллиона строк и позволил ему разорваться. Сначала я думал, что мой поток на самом деле не выполняется вне основного процесса, но потом я понял, что операция поиска была чрезвычайно быстрой, и он обновлял графический интерфейс, который занимал более 10 секунд:
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)
{
}
}
Загрузка результирующего массива в текстовое поле - то, что замораживает мой пользовательский интерфейс. Есть ли возможность обновить пользовательский интерфейс потенциально большими объемами данных, не будучи заблокированным?