Windows应用商店中的消息对话框没有异步?

时间:2013-04-11 00:40:54

标签: windows-store-apps async-await

所以,我正在将应用程序移植到Windows应用商店。在应用程序的开头,我有一些代码,问一个问题。在我得到回应之前,我不希望我的代码继续消防。

我有这个:

        string message = "Yadda Yadda Yadda";
        MessageDialog msgBox = new MessageDialog(message, "Debug Trial");
        msgBox.Commands.Add(new UICommand("OK",
                    (command) => { curSettings.IsTrial = true; }));
        msgBox.Commands.Add(new UICommand("Cancel",
                    (command) => { curSettings.IsTrial = false; }));
        await msgBox.ShowAsync();

        //... more code that needs the IsTrial value set BEFORE it can run...

当我运行应用程序时,msgBox.ShowAsync()之后的代码运行,没有设置正确的值。只有在方法完成后,用户才能看到对话框。

我希望这更像是一个提示,其中程序WAITS让用户在继续方法之前单击。我该怎么做?

1 个答案:

答案 0 :(得分:2)

MessageDialog没有“Show”的非异步方法。如果您想在继续操作之前等待对话框中的响应,则可以使用await关键字。

这里也是Windows Store应用程序中异步编程的quickstart guide

我看到你的代码示例已经使用了“await”。您还必须将调用函数标记为“async”才能使其正常工作。

示例:

private async void Button1_Click(object sender, RoutedEventArgs e) 
{
    MessageDialog md = new MessageDialog("This is a MessageDialog", "Title");
    bool? result = null;
    md.Commands.Add(
       new UICommand("OK", new UICommandInvokedHandler((cmd) => result = true)));
    md.Commands.Add(
       new UICommand("Cancel", new UICommandInvokedHandler((cmd) => result = false)));

    await md.ShowAsync();

    if (result == true) 
    {
        // do something   
    }
}