. Ho un'app di Windows Store C#. Sto provando a lanciare un MessageDialog
quando si fa clic su uno dei pulsanti di comando all'interno di un altro MessageDialog
. Il punto è di avvertire l'utente che il loro contenuto non è salvato, e se fa clic su Annulla, chiederà loro di salvare usando una finestra di dialogo di salvataggio separata.L'operatore 'await' può essere utilizzato solo all'interno di un'espressione lambda asincrona
Ecco la mia funzione "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();
}
}
In VS ottengo un errore di compilazione:
The 'await' operator can only be used within an async lambda expression. Consider marking this lambda expression with the 'async' modifier`
Il metodo è contrassegnato con await
. Se rimuovo await
da prima showSaveDialog, compila (e funziona), ma ottengo un avvertimento che mi dovrebbe usare await
Come utilizzare await
in questo contesto?
Il delegato lambda non è contrassegnato come asincrone '(comando) =>' – Silvermind
Come nota a margine, se ho un programma che chiede me "Rilevato lavoro non salvato. Chiudi comunque?" e fai clic su "No", mi aspetto che l'operazione venga annullata. Non mi aspetto che il programma salvi il file o ti offra di salvare il file. Per il comportamento che stai cercando, la domanda "Rilevato lavoro non salvato. Salva prima di chiudere?" potrebbe essere più appropriato. – hvd
@hvd questo è solo un testo segnaposto al momento, ma apprezzo il suggerimento! – roryok