2013-12-15 85 views
37

我有一個c#Windows Store應用程序。當點擊另一個MessageDialog內的命令按鈕之一時,我試圖啓動一個MessageDialog。關鍵是要警告用戶他們的內容未保存,如果他們點擊取消,它會提示他們使用單獨的保存對話框進行保存。'await'操作符只能在異步lambda表達式中使用

這裏是我的 「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我得到一個編譯錯誤:

The 'await' operator can only be used within an async lambda expression. Consider marking this lambda expression with the 'async' modifier`

方法標有await。如果我從showSaveDialog之前刪除await,它編譯(和作品),但我得到的,我真的應該使用await

如何在這種情況下使用await一個警告?

+3

拉姆達代表沒有被標記爲異步'(命令)=>' – Silvermind

+1

作爲一個方面說明,如果我得到一個程序,要求我「檢測到未保存的工作,仍然關閉?」,然後點擊「否」,我預計操作被取消。我不希望程序保存文件,或提供保存文件。對於你之後的行爲,問題「檢測到未保存的工作,在關閉之前保存?」可能更合適。 – hvd

+0

@ hvd此刻此處僅爲佔位符文字,但我很欣賞這個建議! – roryok

回答

64

你必須標記你的lambda表達式爲async,就像這樣:

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