Обновление 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 - так как добавление узлов в массовом режиме, когда пользовательский интерфейс активен, снизит производительность.

Другие вопросы по тегам