2013-08-03 5 views
0

Я работаю над подсчетом файлов ... Пока я просматриваю справочник в фоновом режиме, я должен выбрать соответствующий узел с таким же именем, что и имя каталога, в моем TreeView с помощью обработчика ProgressChanged.C# Treeview Update from Background Worker

Treeview был уже заполнен всеми подкаталоги с указанным корневой путь ..

Мой ProgressChanged Событие будет запущено 1 раз в 15 миллисекунд .. (так быстро это не так).

так, когда я обновляю свой TreeView в обработчике, мое окно замораживается, и так медленно ... и даже не реагирует ...

Вопрос:

как обновить пользовательский интерфейс с в быстро работает 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(); 
} 

на коде выше я обновление TreeView ...

+1

Не обновляйте это быстро? Выполняйте большие обновления с меньшими интервалами. Я бы также удалил 'EnsureVisible', так как это может быть нежелательным UX для перемещения вещей на экране, когда пользователь смотрит на него. – Jay

+0

Yea .... должен запланировать это .. :-( –

ответ

1

Это звучит как задача обновления в невероятном темпе и обновление пользовательского интерфейса является довольно дорогим. Почему вы не обновляете только каждый десятый тик? Вы также можете отключить рисование, пока заполняется TreeView, - поскольку добавление узлов на массе при активном интерфейсе ухудшит производительность.

+0

Yea .. его дорогой обряд ??? Да .. Я могу приостановить обновление .. и позволить операции как есть .. Я могу его обновить .. на каждые 3 секунды ... UUUHHHHHHH ... отлично ... –