'await'操作符只能在asynchronouslambdaexpression式中使用

我有ac#的Windowsapp store应用程序。 我试图启动一个MessageDialog时,另一个MessageDialog中的命令button之一被点击。 关键是要警告用户他们的内容是未保存的,如果他们点击取消,则会提示他们使用单独的保存对话框进行保存。

这是我的“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'操作符只能在asynchronouslambdaexpression式中使用。 考虑用'asynchronous'修饰符标记这个lambdaexpression式

该方法标有await 。 如果我删除showSaveDialog之前等待,它编译(和工程),但我得到一个警告,我真的应该使用await

我在这方面如何使用await

您必须将您的lambdaexpression式标记为async ,如下所示:

 messageDialog.Commands.Add(new UICommand("No", async (command) => { await showSaveDialog(); }));