Мои комментарии стали довольно длинными, поэтому я решил сделать это отдельным постом.
Во-первых, +1 для Фредрика Мёрка, использование VirtualMode
- путь. Тем не менее, вы теряете некоторые функции, например, Авторазмер столбца, и сортировка легче обрабатывать самостоятельно.
Если это проблема, заполнение рабочего потока может звучать заманчиво. Однако заполнение все равно будет происходить в потоке, который владеет элементом управления списком (то есть практически всегда основным потоком) - .NET делает это видимым, заставляя вас использовать (Begin)Invoke
. Кроме того, переключение контекста значительно увеличит общее время, необходимое для заполнения всех элементов, если вы заполняете один за другим, поэтому вы хотите заполнить куски (скажем, 50 элементов за раз, или даже лучше заполнить столько, сколько сможете в миллисекунды). Добавьте к этому дополнительную синхронизацию, необходимую при изменении содержимого, у вас есть довольно сложное решение для не столь звездного результата.