@Smilleey

Как правильно реализовать async / await?

Доброй ночи. Подскажите, пожалуйста, как корректно реализовать следующий функционал в WPF приложении:
Имеется View с DataGrid. Данные для DataGrid берутся из ObservableCollection. Хочется чтобы ObservableCollection наполнялся из БД асинхронным методом. На данный момент написано следующее, но, естественно, не работает. Подскажите где косяк, пожалуйста:
View:
...
<dxg:GridControl ShowLoadingPanel="{Binding MerchantsLoading}" ItemsSource="{Binding Merchants}".../>
...


ViewModel:
public MerchantViewModel {
            MerchantsLoading = true;
            Merchants = SQLite.GetMerchants().Result;
            SQLite.GetMerchants().ContinueWith(task => MerchantsLoading = false);
}


GetMerchants:
public static async Task<ObservableCollectionCore<Merchant.Merchant>> GetMerchants()
        {
            SQLiteConnection SqlConnection = new SQLiteConnection(MerchantDB);
            var Merchants = new ObservableCollectionCore<Merchant.Merchant>();
            try
            {
                SqlConnection.Open();
                SQLiteCommand myCommand = new SQLiteCommand("select * from merchant", SqlConnection);
                DbDataReader myReader = await myCommand.ExecuteReaderAsync();
                while (myReader.Read())
                {
                    Merchants.Add(new Merchant.Merchant
                    {
                        ID = Convert.ToInt32(myReader["ID"]),
                        Name = Convert.ToString(myReader["Name"])
                    });
                }
            }
            catch (Exception ex)
            {
                Messenger.Default.Send(new LogMessage { Message = "Ошибка в процедуре GetMerchants" });
                Messenger.Default.Send(new LogMessage { Message = ex.ToString() });
            }
            finally
            {
                SqlConnection.Close();
            }
            return Merchants;
        }
  • Вопрос задан
  • 1168 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rou1997
@Rou1997
Merchants в ViewModel реализуйте как свойство с get и инициализируйте сразу в конструкторе, или отправляйте DataGrid'у сообщение об обновлении набора данных.
Ответ написан
Не все асинхронно, что заканчивается на async.
В данном случае не все и на async заканчивается.Иногда проще лонгранниг таск создать(часто).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы