导航前可等待方法时棱镜不导航到页面
Prism not navigating to page when await-able method before navigation
我正在使用 Xamarin.Forms 4.4.0.9916
和 Prism.Unity.Forms 7.2.0.1422
在基本的棱镜应用程序中,我想在导航到 MainPage
之前执行一项任务(例如,我将任务替换为 await Task.Delay(500);
)
问题是应用程序没有导航到 MainPage
。
如果我注释掉 await Task.Delay(500);
然后应用程序导航到 MainPage
那么,该代码有什么问题?在导航到 MainPage 之前,我怎样才能有一个可等待的方法?
当 await Task.Delay(x);
速度快(即 await Task.Delay(50);
)时,应用会导航到 MainPage
public partial class App : PrismApplication
{
public App() : this(null) { }
public App(IPlatformInitializer initializer = null) : base(initializer) { }
protected override async void OnInitialized()
{
InitializeComponent();
await Task.Delay(500);
await NavigationService.NavigateAsync(new Uri("http://www.somewhere.com/MainPage", UriKind.Absolute));
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<NavigationPage>();
containerRegistry.RegisterForNavigation<MainPage, MainPageViewModel>();
}
}
这里有不止一种方法,但是您想要实现的是某种 LoadingPage。如果需要(没有 ViewModel),这可以是一个相当 "Dumb" 的页面。或者,您可以将启动逻辑迁移到 LoadingPageViewModel,然后从那里导航。
protected override async void OnInitialized()
{
// This ensures the MainPage is set and prevents the app from being killed
// by the platform. Also provides better User Experience...
await NavigationService.NavigateAsync("/LoadingPage");
await Task.Delay(TimeSpan.FromSeconds(30));
await NavigationService.NavigateAsync("/MainPage");
}
我正在使用 Xamarin.Forms 4.4.0.9916
和 Prism.Unity.Forms 7.2.0.1422
在基本的棱镜应用程序中,我想在导航到 MainPage
之前执行一项任务(例如,我将任务替换为 await Task.Delay(500);
)
问题是应用程序没有导航到 MainPage
。
如果我注释掉 await Task.Delay(500);
然后应用程序导航到 MainPage
那么,该代码有什么问题?在导航到 MainPage 之前,我怎样才能有一个可等待的方法?
当 await Task.Delay(x);
速度快(即 await Task.Delay(50);
)时,应用会导航到 MainPage
public partial class App : PrismApplication
{
public App() : this(null) { }
public App(IPlatformInitializer initializer = null) : base(initializer) { }
protected override async void OnInitialized()
{
InitializeComponent();
await Task.Delay(500);
await NavigationService.NavigateAsync(new Uri("http://www.somewhere.com/MainPage", UriKind.Absolute));
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<NavigationPage>();
containerRegistry.RegisterForNavigation<MainPage, MainPageViewModel>();
}
}
这里有不止一种方法,但是您想要实现的是某种 LoadingPage。如果需要(没有 ViewModel),这可以是一个相当 "Dumb" 的页面。或者,您可以将启动逻辑迁移到 LoadingPageViewModel,然后从那里导航。
protected override async void OnInitialized()
{
// This ensures the MainPage is set and prevents the app from being killed
// by the platform. Also provides better User Experience...
await NavigationService.NavigateAsync("/LoadingPage");
await Task.Delay(TimeSpan.FromSeconds(30));
await NavigationService.NavigateAsync("/MainPage");
}