导航前的等待方法时棱镜无法导航到页面

时间:2020-02-24 23:08:15

标签: xamarin.forms prism

我正在使用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>();
    }
}

1 个答案:

答案 0 :(得分:0)

这里有多种处理方法,但是您要实现的是某种LoadingPage。如果需要的话,这可以是一个相当“哑”的页面(没有ViewModel)。另外,您可以将启动逻辑迁移到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");
}