所以,我正在将应用程序移植到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让用户在继续方法之前单击。我该怎么做?
答案 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
}
}