1

私はWindows Phone 8用のアプリを作成しています。これは、コンテンツをロードするために、ファイルからデータをロードして解析する必要があります。読み込みと解析の部分は 3 つの異なる非同期タスクで発生し、各タスクが完了すると、パブリック ブール値フラグが false から true に変わります。このすべてにかかる時間はせいぜい 1 ~ 2 秒で、データはアプリの実行に不可欠なので、SplashScreen.xamlOnNavigatedToメソッドに入れました。メインページに安全に進むことができるように、n個のフラグがすべてtrueになるのを待つ方法を知りたいです。

皆さん、ありがとうございました。

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 スレッドからのみ呼び出すことができます。パラメータは現在の同期コンテキストをキャプチャしますが、UI スレッドからメソッドTaskScheduler.FromCurrentSynchronizationContext()を呼び出した場合にのみ機能します。Task.WhenAllそれ以外の場合は、ディスパッチャーを使用する必要があります。

Task.WhenAll(task1, task2, task3).ContinueWith(_ =>
{
    Dispatcher.BeginInvoke(() => this.NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)));
});
于 2013-09-28T22:17:40.033 に答える