Если ваши данные загружаются в ответ на нажатие кнопки, проверьте тип возвращаемого значения вашего обработчика событий от void
до Task
и пометьте метод ключевым словом async
.
Примерно так:
public async Task OnGetDataClick(object sender, RoutedEventArgs e)
{
Data = await service.GetData();
}
Вам также потребуется изменить тип возврата метода, получающего данные.Скажите, что вы вернулись ObservableCollection<T>
, измените на Task<ObservableCollection<T>>
, а также добавьте ключевое слово async
.В вашем обработчике событий вам нужно дождаться результата вызова службы, как показано выше.
Если вы читаете данные, используя API, который имеет асинхронные методы для чтения, тогда ваша служба может иметь методкак это:
public async Task<ObservableCollection<object>> GetDataAsync()
{
return await api.GetDataAsync();
}
В противном случае, если вам нужно прочитать файл синхронно, вы можете сделать это в другом потоке, например:
public async Task<ObservableCollection<object>> GetDataAsync()
{
return await Task.Run(() => api.getData());
}
Вот ссылка на документацию Microsoft по асинхронности/ await: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/
Также у dotnetpearls есть несколько хороших примеров: https://www.dotnetperls.com/async