Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ';等待&x27;运算符只能在异步lambda表达式中使用_C#_Lambda_Modal Dialog_Windows Store Apps_Async Await - Fatal编程技术网

C# ';等待&x27;运算符只能在异步lambda表达式中使用

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 =

我有一个c#Windows应用商店应用程序。当单击另一个
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这目前只是占位符文本,但我感谢您的建议!