#c# #xamarin.forms
#c# #xamarin.forms
Вопрос:
В моем запуске (app.xaml.cs) в методе OnStart() я использую Acr.UserDialogs для отображения счетчика загрузки, пока я извлекаю данные из базы данных. В настоящее время у меня возникла проблема, когда по завершении задачи я ожидаю, что она перейдет на новую страницу, но этого не происходит, и я не знаю, что я делаю не так.
У меня есть следующий код:
protected override void OnStart()
{
//showing the loading spinner here (Works)
Device.BeginInvokeOnMainThread(() => UserDialogs.Instance.ShowLoading("Loading ...",
MaskType.Black));
Task.Run(async () =>
{
ProductsViewModel = await _storeService.GetProducts();
})
.ContinueWith(result => Device.BeginInvokeOnMainThread(
() =>
{
UserDialogs.Instance.HideLoading();
//once the data is recieved here, I expect this to transition to the ProductList
//Page but it doesn't and I'm not sure why
MainPage = new NavigationPage(new ProductList(ProductsViewModel));
})
);
}
Может быть, это потому, что я что-то блокирую?
Комментарии:
1. Попробуйте поместить
await Task.Delay(100);
после строки showLoading.2. к сожалению, это не сработало
3. Разве вы не можете просто сделать
OnStart
асинхронным, а затем избавиться от своегоTask.Run
?
Ответ №1:
Во-первых, нам нужно будет инициализировать главную страницу в конструкторе класса приложения. Мы можем создать объект ContentPage и назначить его главной странице. Мы создаем объект базового класса (ContentPage), чтобы он выглядел без изменений в пользовательском интерфейсе.
public App()
{
InitializeComponent();
MainPage = new ContentPage();
}
protected override void OnStart()
{
//showing the loading spinner here (Works)
Device.BeginInvokeOnMainThread(() => UserDialogs.Instance.ShowLoading("Loading ...",
MaskType.Black));
Task.Run(async () =>
{
ProductsViewModel = await _storeService.GetProducts();
})
.ContinueWith(result => Device.BeginInvokeOnMainThread(
() =>
{
UserDialogs.Instance.HideLoading();
//once the data is recieved here, I expect this to transition to the ProductList
//Page but it doesn't and I'm not sure why
MainPage = new NavigationPage(new ProductList(ProductsViewModel));
})
);
}
Комментарии:
1. Сработало отлично! Спасибо!