为什么等待Page构造函数nevers中的MessageDialog结束?

时间:2016-06-07 11:58:10

标签: c# asynchronous async-await uwp messagedialog

在启动画面期间,当我的UWP应用程序启动时,我需要等待MessageDialog的结果。所以,我把这个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
}

如何解决此问题?

1 个答案:

答案 0 :(得分: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
}

这将在启动画面期间显示您的对话框,但在显示主页面之前(如您所愿)。如果出现问题,您也可以在此时终止整个申请。