Да, вы можете это сделать. Вам нужно будет загрузить имена файлов в нестандартную структуру данных, а не загружать их непосредственно в элемент управления. Затем вы можете периодически обновлять элемент управления, чтобы отображать все, что загружено до сих пор. Тем не менее, я думаю, вы обнаружите, что медленность приходит только от обновления управления. Как только вы удалите эту часть, не будет необходимости периодически обновлять элемент управления во время процесса загрузки, так как он будет почти мгновенным.
Вы можете просто загрузить все имена файлов в строку, а затем установить только текстовое поле этой строки после того, как он был полностью загружен, например:
Dim imagePaths As String = ""
For Each image As String In Directory.GetFiles("c:\myimages\")
imagePaths &= image & Environment.NewLine
Next
txtbAllimg.Text = imagePaths
Однако, это не так эффективно, как использование StringBuilder
:
Dim imagePaths As New StringBuilder()
For Each image As String In Directory.GetFiles("c:\myimages\")
imagePaths.AppendLine(image)
Next
txtbAllimg.Text = imagePaths.ToString()
Однако, так как метод GetFiles
уже возвращая полный список путей к вам как массив строк, было бы еще удобнее (и, вероятно, даже более эффективно) просто использовать String.Join
способ объединить все элементы в массиве в одну строку:
txtbAllimg.Text = String.Join(Environment.NewLine, Directory.GetFiles("c:\myimages\"))
Это полностью самозанятая проблема. В мире нет пользователя, который считает, что текстовое поле полезно. Никто не любит смотреть на безумно прокручивающееся окно, имея возможность читать 20 000 строк текста или когда-либо рассматривать его редактирование. Так что просто избавитесь от текстового поля. Вместо этого используйте ярлык, обновляя его один раз каждые 100 мс достаточно хорошо. Используйте [этот] (http://stackoverflow.com/a/2397968/17034). –
В этом случае список не является вариантом из-за других инструментов, используемых с этим приложением. Это не предназначено для людей читать 20000 строк, но обрабатывать их потом ... – daviddgz
Этикетка, а не ListBox. Используйте StringBuilder, чтобы «обрабатывать их потом». –