Virtual ListView падает при проставлении VirtualListSize
От: Ёрик  
Дата: 10.02.08 15:38
Оценка:
На форме есть ListView в виртуальном режиме. При определённых условиях этот ListView должен заполняться новым набором значений. Соответственно меняю его размер — от 0 до многа. Изменение значения VirtualListSize приводит к такому падению:

An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in System.Windows.Forms.dll

Additional information: InvalidArgument=Value of '2' is not valid for 'index'.

при следующих шагах: выбираю последний элемент ListView, когда в нём много элементов (порядка 600), потом меняю размер на маленький (скажем, 2). Попробовал поставить lock(this) в месте, где меняю размер листа и в OnRetrieveVirtualItem — падать стало реже, но стабильно. Такое впечатление, что кто-то внутри ещё отрисовывает предыдущий набор айтемов количеством 600 и ему не нравится проставление размера листа в 2.

Как это цивильно решить? Прокатывает try-catch с повторным выставлением VirtualListSize в catch, но это как-то чересчур криво.

P.S. Искал тут подобную проблему — нашёл несколько десятков багрепортов про RSDN@home с идентичным текстом исключения, увы, без решения. Но, стало быть, проблема известная и частая.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.