'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(); }));