2013-12-15 33 views
37

Bir C# Windows Mağaza uygulaması var. Başka bir MessageDialog içindeki komut düğmelerinden birine tıklandığında MessageDialog başlatmaya çalışıyorum. Bunun amacı kullanıcıyı içeriğinin kaydedilmemiş olduğu konusunda uyarmak ve iptal etmeleri durumunda ayrı bir kayıt iletişim kutusu kullanarak kaydetmelerini ister. yöntem await ile işaretlenmiştir'Beklemek' operatörü sadece bir uyumsuz lambda ifadesi içinde kullanılabilir

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

: VS In

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

Bir derleyici hatası alıyorum:

İşte benim "showCloseDialog" fonksiyonu bulunuyor. Ben showSaveDialog önce gelen await kaldırırsanız, derler (ve çalışır) ama ben gerçekten await

nasıl bu bağlamda await kullanırım kullanmalıdır bir uyarı olsun?

+3

lambda temsilci zaman uyumsuz olarak işaretlenmemiş '(komut) =>' Bir yan not olarak – Silvermind

+1

ben bir program alırsanız, o sorar ben "Kaydedilmemiş iş tespit edildi. Yine de kapatın?" ve "Hayır" ı tıklayın, işlemin iptal edilmesini beklerim. Programın dosyayı kaydetmesini veya dosyayı kaydetmeyi teklif etmesini beklemiyorum. Kullandığınız davranış için "Kaydedilmemiş iş tespit edildi. Kapatmadan önce kaydet"? daha uygun olabilir. – hvd

+0

@hvd bu sadece şu anda yer tutucu metni, ancak öneriyi takdir ediyorum! – roryok

cevap

64

Çok gibi async olarak lambda ifade işaretlemek gerekir:

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