1

我正在为 windows phone 8 编写一个应用程序,用于加载它的内容,应该从某个文件加载和解析一些数据。加载和解析部分发生在三个不同的异步任务中,当每个任务完成时,公共布尔标志从 false 变为 true。所有这一切最多大约需要一两秒钟,并且数据对于应用程序的运行时至关重要,所以我把它放在 aSplashScreen.xamlOnNavigatedTo方法中。现在我想知道如何等待所有 n 标志变为真,以便我可以安全地进入主页。

谢谢你们。

4

1 回答 1

1

由于您已经有任务,您可以使用该方法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)));
});
于 2013-09-28T22:17:40.033 回答