1

所以,我正在将一个应用程序移植到 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() 之后的代码运行,但没有设置正确的值。只有在方法完成后,用户才会看到对话框。

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

4

1 回答 1

2

MessageDialog 没有用于“显示”的非异步方法。如果您想在继续之前等待对话框的响应,您可以简单地使用await关键字。

这也是 Windows 应用商店应用中异步编程的快速入门指南

我看到您的代码示例已经使用“等待”。您还必须将调用函数标记为“异步”以使其正常工作。

例子:

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   
    }
}
于 2013-04-11T18:14:28.573 回答