Rassler48 Ответов: 1

Listview множественный выбор медленно


Давным-давно (и очень далеко) Я написал приложение для видеотеки (только для себя), и, кроме небольших изменений по пути, я перекомпилировал его для каждого нового компьютера в течение многих лет.

Ключевая часть-это ListView, я показываю отфильтрованные представления значков всех моих видео и т. д., Поэтому я могу классифицировать их или воспроизводить/копировать их.

На этой конкретной машине (она была у меня уже около месяца) все работает нормально, за исключением тех случаев, когда я пытаюсь выбрать много видео за один раз. Нажмите на первый, Shift-нажмите на последний, я могу сидеть здесь и смотреть, как он медленно высвечивает каждую из иконок. Даже (скажем) десять иконок я могу смотреть в течение нескольких секунд, прежде чем интерфейс догонит меня.

Как я ни стараюсь, я просто не могу найти причину, по которой эта операция должна быть медленной.

Поэтому я собрал еще одно тестовое приложение, дал ему 100 элементов (только что написанных в коде) выберите первый, shift-выберите последний, и он медленно катится через hi-lighting выбранные значки.

Единственная разница между этой компиляцией и той, что была на моем старом компьютере, заключается в том, что я использую новейшую Visual Studio (перешел с VS15 на VS17) и ее библиотеку элементов управления, но я не знаю о каких-либо обновлениях библиотеки элементов управления.

Есть ли у вас причины или идеи для медленного отбора, на которые я мог бы посмотреть?

Что я уже пробовал:

In the debug and process loading there is nothing noticeable that suggests excessive CPU or memory use.

1 Ответов

Рейтинг:
9

#realJSOP

Вы можете попробовать это (никаких гарантий):

stView1.SelectedIndexChanged-=listView1_SelectedIndexChanged;
listView1.SuspendLayout();

try
{
 // selection loop
}
finally
{
  listView1.SelectedIndexChanged+=new EventHandler(listView1_SelectedIndexChanged);
  listView1.ResumeLayout();
}


Nelek

Привет, Джон. ОП написал в не решении ниже:
------------------
Это сработало. Я просто дважды проверил версию, работающую на старой машине, и мне не нужно было использовать suspendLayout на этом.

Должно быть, что-то изменилось между версиями, но теперь я знаю, что это такое, и могу с этим работать.

Спасибо, Джон.
-------------

На всякий случай