В .NET есть такой перечислимый тип как ObservableCollection. Его особенность в том, что эта коллекция при изменении её элементов (добавлении или удалении), уведомляет наблюдающие за ней классы об этом изменении. Это бывает полезно, например, когда к данной коллекции привязаны элементы пользовательского интерфейса. Но если необходимо добавить в коллекцию сразу множество элементов, то добавление каждого элемента будет уведомлять об изменении коллекции каждый раз. Это вызовет избыточную нагрузку на пользовательский интерфейс, и он может даже зависнуть на какое-то время. Чтобы этого избежать, можно написать свой собственный класс, который будет наследовать от ObservableCollection и содержать метод добавления множества элементов за один раз, а уведомлять об этом единожды. Вот как например это можно сделать:
Imports System.Collections.Specialized
''' <summary>
''' ObservableCollection с поддержой добавления множества элементов.
''' </summary>
Public Class ObservableRangeCollection(Of T)
Inherits ObjectModel.ObservableCollection(Of T)
#Region "CTORs"
Public Sub New()
MyBase.New()
End Sub
Public Sub New(collection As IEnumerable(Of T))
MyBase.New(collection)
End Sub
#End Region '/CTORs
#Region "METHODS"
''' <summary>
''' Добавляет в коллекцию несколько элементов и в конце уведомляет об этом.
''' </summary>
Public Sub AddRange(collection As IEnumerable(Of T))
For Each item As T In collection
Items.Add(item)
Next
OnCollectionChanged(New NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, collection))
End Sub
#End Region '/METHODS
End Class
По аналогии с методом AddRange можно добавить методы для удаления, вставки или перемещения набора элементов коллекции.