C# ';等待&x27;运算符只能在异步lambda表达式中使用
我有一个c#Windows应用商店应用程序。当单击另一个C# ';等待&x27;运算符只能在异步lambda表达式中使用,c#,lambda,modal-dialog,windows-store-apps,async-await,C#,Lambda,Modal Dialog,Windows Store Apps,Async Await,我有一个c#Windows应用商店应用程序。当单击另一个MessageDialog中的一个命令按钮时,我正试图启动一个MessageDialog。这是为了警告用户他们的内容未保存,如果他们单击“取消”,它将提示他们使用单独的“保存”对话框进行保存 以下是我的“showCloseDialog”功能: private async Task showCloseDialog() { if (b_editedSinceSave) { var messageDialog =
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表达式中使用。考虑用“异步”修饰符'标记此lambda表达式。
该方法标记为wait
。如果我从showSaveDialog之前删除await
,它会编译(并工作),但我会收到一条警告,我确实应该使用await
在此上下文中如何使用
wait
必须将lambda表达式标记为async
,如下所示:
messageDialog.Commands.Add(new UICommand("No", async (command) =>
{
await showSaveDialog();
}));
lambda委托未标记为async
(command)=>
作为旁注,如果我收到一个程序询问我“检测到未保存的工作。是否仍要关闭?”,并单击“否”,我希望操作被取消。我不希望程序保存文件,也不希望提供保存文件的功能。对于您所关注的行为,问题“检测到未保存的工作。在关闭前保存?”可能更合适。@hvd这目前只是占位符文本,但我感谢您的建议!