На форме есть 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 с идентичным текстом исключения, увы, без решения. Но, стало быть, проблема известная и частая.
Здравствуйте, Drusha, Вы писали:
D>Посмотри здесь
Спасибо большое! Прикольно, на первую багу я тоже наткнулся (молчаливое падение даже без эксепций при 260 символах).