【问题标题】:Why await MessageDialog in Page constructor nevers ends?为什么在 Page 构造函数中等待 MessageDialog 永远不会结束?
【发布时间】:2016-06-07 11:58:10
【问题描述】:

当我的 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
}

我该如何解决这个问题?

【问题讨论】:

标签: c# asynchronous async-await uwp messagedialog


【解决方案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
}

这将在初始屏幕期间显示您的对话框,但在显示主页之前(如您所愿)。如果出现问题,您也可以在此时终止整个应用程序。

【讨论】:

    猜你喜欢
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2011-08-04
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多