Медленное обновление Listview в c # - PullRequest
1 голос
/ 07 сентября 2011

У меня есть один ArrayList, и он часто меняется.

ListView отображает данные ArrayList, поэтому этот ListView должен быть быстро изменен при изменении ArrayList.

Итак, я написал такой код:

ArrayList ar;
ListView lv;

paintmethod()
{
  lv.items.clear();
  lv.addlistview(ar);
  lv.invalidate();
}

private void addlistview(ArrayList arr)
{
  lv.Items.Add(arr.somedata.tostring(),arr.somedata.tostring());
}

Этот код работает, но когда ArrayList изменился, ListView не обновляется немедленно.

Обновляется через 20 секунд, 30 секунд или даже через 1 минуту.

Как я могу сделать больше, чтобы решить эту проблему?

Ответы [ 3 ]

2 голосов
/ 07 сентября 2011

Попробуйте ниже и посмотрите лучше. Рекомендуется использовать BeginUpdate () и EndUpdate () при обновлении нескольких элементов listView. Поскольку BeginUpdate () запрещает рисование элемента управления до тех пор, пока не будет вызван метод EndUpdate.

paintmethod()
{
    lv.BeginUpdate();

    lv.items.clear();
    lv.addlistview(ar);

    lv.EndUpdate();
}

Предпочтительным способом добавления нескольких элементов в ListView является использование AddRange метод ListView.ListViewItemCollection (доступ к через свойство Items объекта ListView). Это позволяет вам добавить массив элементов в списке в одной операции.

* MSDN 1013 *

Это должно значительно повысить производительность.

1 голос
/ 07 сентября 2011

Есть ли причина, по которой вы не привязываете свой listview.ItemsSource к наблюдаемой коллекции? Тогда вам нужно будет работать только с наблюдаемой коллекцией, и это будет постепенно уведомлять представление списка.

0 голосов
/ 07 сентября 2011
this.SuspendLayout();
lv.items.clear();
lv.addlistview(ar);
lv.invalidate();
this.ResumeLayout(false);
...