导航前可等待方法时棱镜不导航到页面

Prism not navigating to page when await-able method before navigation

我正在使用 Xamarin.Forms 4.4.0.9916Prism.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");
}