Приложение явно «зависает», потому что загрузка данных происходит в потоке пользовательского интерфейса.
Следует рассмотреть другую модель, которая позволяет загружать данные в другой поток и периодически обновлять пользовательский интерфейс или каки когда поступают новые данные.
Вы можете использовать для этого ObservableCollection
.
Поток фоновой загрузки обновляет коллекцию и запускает событие в пользовательском интерфейсе.поток, указывающий, что требуется обновление.
Есть пример того, как это сделать на GALA Soft
Вы создаете свойство (только для чтения в этом случае) дляколлекция:
private ObservableCollection<MyDataItem> dataItems;
public ObservableCollection<MyDataItem> DataItems
{
get { return dataItems; }
}
Тогда в вашем XAML:
<ListBox ItemsSource="{Binding ElementName=mainWindow, Path=DataItems}"
...>
</ListBox>