1

MessageDialogスプラッシュ スクリーンで、UWP アプリケーションの起動時に結果を待つ必要があります。したがって、これをコンストラクターMessageDialog内に配置します。MainPage

private async Task ParseConfiguration()
{
    var dialog = new MessageDialog("Message", "Title");
    dialog.Commands.Add(new UICommand { Label = "Exit", Id = 0 });

    await dialog.ShowAsync();
}


public MainPage()
{
    ParseConfiguration();   // works, but I need to wait
    ParseConfiguration().Wait(); // never exits this call
}

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

そのタスクを待機してUIスレッドをブロックしているため、ダイアログ(明らかにUIスレッドも表示する必要があります)を表示できず、全体がデッドロックします。ただし、ページ コンストラクターは、とにかくこれを行うのに適した場所ではありません (および一般的なコンストラクター)。代わりに (たとえば、これが唯一の場所ではありません)、次の場所でこれを行うことができますApplication.OnLaunched

protected override async void OnLaunched(LaunchActivatedEventArgs e) {
    // some other code here
    // parse configuration before main window is shown
    await ParseConfiguration();
    // some more code here, including showing main windo
}

これにより、スプラッシュ画面中にダイアログが表示されますが、メインページが表示される前に(必要に応じて)表示されます。何か問題が発生した場合は、この時点でアプリケーション全体を終了することもできます。

于 2016-06-07T12:40:42.493 に答える