Заполнение ListView в многопоточном приложении - PullRequest
1 голос
/ 11 октября 2009

Мне нужно получить набор данных из базы данных, а затем заполнить ListView данными. Я понимаю многопоточные элементы управления форм и правильные методы обновления элементов управления из рабочих потоков. Вот дилемма:

У меня может быть несколько тысяч записей в ListView ... вместо того, чтобы вызывать поток формы для обновления их по одному, я хотел бы создать коллекцию объектов ListViewItem и использовать ListView.Items.AddRange (ListViewItemCollection) .

Однако в документации MSDN не рекомендуется создавать собственную коллекцию ListViewItemCollection (и, действительно, при попытке создать мою собственную коллекцию ListViewItemCollection генерируется ошибка нулевой ссылки, поскольку родительский набор отсутствует). Вместо этого MS рекомендует работать только с ListViewItemCollection, получая его через свойство ListView.Items.

Что, конечно, является циклическим рассуждением и не может быть выполнено из рабочего потока без генерации ошибки: «Недопустимая операция между потоками: доступ к элементу управления ListView осуществляется из потока, отличного от потока, в котором он был создан . "

Я мог бы использовать перегруженный AddRange (ListViewItem []), но массивы довольно неуклюжи в наше время.

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

1 Ответ

2 голосов
/ 11 октября 2009

Я думаю, у вас уже есть ответ - AddRange (ListViewItem []). Если вы находите массивы неприятными, вы можете использовать List, а затем выполнить toArray () прямо при вызове AddRange.

...