我正在为 windows phone 8 编写一个应用程序,用于加载它的内容,应该从某个文件加载和解析一些数据。加载和解析部分发生在三个不同的异步任务中,当每个任务完成时,公共布尔标志从 false 变为 true。所有这一切最多大约需要一两秒钟,并且数据对于应用程序的运行时至关重要,所以我把它放在 aSplashScreen.xaml
的OnNavigatedTo
方法中。现在我想知道如何等待所有 n 标志变为真,以便我可以安全地进入主页。
谢谢你们。
我正在为 windows phone 8 编写一个应用程序,用于加载它的内容,应该从某个文件加载和解析一些数据。加载和解析部分发生在三个不同的异步任务中,当每个任务完成时,公共布尔标志从 false 变为 true。所有这一切最多大约需要一两秒钟,并且数据对于应用程序的运行时至关重要,所以我把它放在 aSplashScreen.xaml
的OnNavigatedTo
方法中。现在我想知道如何等待所有 n 标志变为真,以便我可以安全地进入主页。
谢谢你们。
由于您已经有任务,您可以使用该方法Task.WhenAll
在所有任务执行完毕后执行操作:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Task.WhenAll(task1, task2, task3).ContinueWith(_ =>
{
this.NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
}, TaskScheduler.FromCurrentSynchronizationContext());
}
注意:导航只能从 UI 线程调用。该TaskScheduler.FromCurrentSynchronizationContext()
参数捕获当前同步上下文,但仅当您Task.WhenAll
从 UI 线程调用该方法时它才会起作用。否则,您将不得不使用调度程序:
Task.WhenAll(task1, task2, task3).ContinueWith(_ =>
{
Dispatcher.BeginInvoke(() => this.NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)));
});