Обновление C# Treeview от Background Worker
Я работаю над подсчетом файлов... Пока я сканирую каталог в фоновом режиме, я должен выбрать соответствующий узел, который имеет то же имя, что и имя каталога в моем TreeView
с помощью ProgressChanged
обработчик.
Treeview уже был заполнен всеми подкаталогами с указанным корневым путем.
мой ProgressChanged
Событие будет запущено 1 раз в 15 миллисекунд.. (так быстро, не правда ли).
поэтому, когда я обновляю свое древовидное представление в этом обработчике, мое окно зависает и так медленно... и даже не отвечает...
Вопрос:
как быстро обновить пользовательский интерфейс ProgressChanged
Обработчик..
Код
var nodes = tv.FlattenTree()
.Where(n => n.Text == new FileInfo(CurrentFilePath).Directory.Parent.Name)
.ToList();
по вышеуказанному коду я выбираю узел.
if (nodes.Count() > 0)
{
nodes[0].ForeColor = Color.Blue;
nodes[0].EnsureVisible();
}
по приведенному выше коду я обновляю дерево
1 ответ
Похоже, что задача обновляется с невероятной скоростью, а обновление пользовательского интерфейса довольно дорого. Почему бы вам не обновлять только каждый десятый тик? Вы также можете отключить рисование во время заполнения TreeView - так как добавление узлов в массовом режиме, когда пользовательский интерфейс активен, снизит производительность.