我有一个c#Windows Store应用程序。当我点击另一个MessageDialog
中的一个命令按钮时,我正在尝试启动MessageDialog
。这一点是警告用户他们的内容未保存,如果他们点击取消,它将提示他们使用单独的保存对话框进行保存。
这是我的“showCloseDialog”函数:
private async Task showCloseDialog()
{
if (b_editedSinceSave)
{
var messageDialog = new MessageDialog("Unsaved work detected. Close anyway?", "Confirmation Message");
messageDialog.Commands.Add(new UICommand("Yes", (command) =>
{
// close document
editor.Document.SetText(TextSetOptions.None, "");
}));
messageDialog.Commands.Add(new UICommand("No", (command) =>
{
// save document
await showSaveDialog();
}));
messageDialog.DefaultCommandIndex = 1;
await messageDialog.ShowAsync();
}
}
在VS中我收到编译错误:
'await'运算符只能在异步lambda表达式中使用。考虑使用'async'修饰符`
标记此lambda表达式
该方法标有await
。如果我从showSaveDialog之前删除await
,它会编译(并且有效),但我收到警告,我确实应该使用await
如何在此上下文中使用await
?
答案 0 :(得分:80)
您必须将lambda表达式标记为async
,如下所示:
messageDialog.Commands.Add(new UICommand("No", async (command) =>
{
await showSaveDialog();
}));