У меня есть приложение WPF (UI), которое извлекает данные из базы данных SQL во время инициализации / загрузки. Чтобы ускорить время запуска приложения (и не зависать из-за загрузки данных), я попытался сделать несколько вещей, чтобы загрузить данные асинхронно, но без особой удачи с точки зрения UX, который я ожидал.
В основном, пользовательский интерфейс все еще зависает (даже если это ненадолго).
Вот что я пробовал:
Метод загрузки данных помечается asyn c Задача , Я вызываю этот метод следующим образом:
// Note that i use ConfigureAwait(true) because the data is being loaded from the UI.
LoadData().CongigureAwait(true);
Вот метод:
private async void LoadData()
{
try
{
using (var context = new DataModel.BusinessData())
{
var people= await context.People
.ToListAsync()
.ConfigureAwait(true);
foreach (var person in people)
{
this.People.Add(new PersonItem(person));
}
}
}
catch (Exception ex)
{
throw;
}
}
Теперь, несмотря на асинхронный характер этого поиска данных, он обрабатывается обратно в главном потоке ( Пользовательский интерфейс). Опять же, это вызывается из пользовательского интерфейса (шаблон MVVM), поэтому мне нужно это.
Конечный результат таков:
Я все еще вижу короткий момент UI зависает во время запуска.
Вопрос:
Как данные могут быть получены и обработаны потоком пользовательского интерфейса БЕЗ замораживания пользовательского интерфейса? Возможно ли это даже при обработке потоком пользовательского интерфейса?