Сделайте интерфейс отзывчивым, преобразовав вызовы базы данных в асинхронные вызовы в EF

Я использую новый доступ к данным в универсальной платформе Windows. Я могу получить данные, но проблема в том, что поисковый код является синхронным по своей природе, приложение Windows перестает отвечать до тех пор, пока не будет получен полный список. Так как его привязали к ObservableCollection, Пользовательский интерфейс обновляется, как только список получен.

public List<Brand> retrieveBrands()
{
    List<Brand> brandList = new List<Brand>();
    using (var db = new CarDataContext())
    {
        brandList = db.Brands.ToList();
    }
    return brandList;
}

Но теперь, поскольку между поиском списка есть временная задержка, пользовательский интерфейс перестает отвечать на запросы в течение нескольких секунд. Как я могу сделать этот поиск асинхронным / сделать мой метод асинхронным, чтобы, как только список был восстановлен, я смог получить задачу. Заполненное уведомление и пользовательский интерфейс остаются отзывчивыми.

Мой вопрос почти похож на тот, что задавался здесь, но поскольку ответа нет, я отправляю вопрос.

1 ответ

Решение

Вы можете попробовать что-то вроде этого

public Task<List<Brand>> retrieveBrands()
{
    return Task.Run(()=>
    {
        List<Brand> brandList = new List<Brand>();
        sing (var db = new CarDataContext())
        {
            brandList = db.Brands.ToList();
        }
        return brandList;
    });
}
Другие вопросы по тегам