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