J'ai une application c # Windows Store. J'essaie de lancer un MessageDialog
lorsque l'un des boutons de commande d'un autre MessageDialog
est cliqué. Le but de cela est d'avertir l'utilisateur que son contenu n'est pas enregistré, et s'il clique sur annuler, il sera invité à enregistrer à l'aide d'une boîte de dialogue d'enregistrement distinct.
Voici ma fonction "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();
}
}
Dans VS, j'obtiens une erreur de compilation:
L'opérateur "wait" ne peut être utilisé que dans une expression lambda asynchrone. Pensez à marquer cette expression lambda avec le modificateur "async".
La méthode est marquée par await
. Si je supprime await
d'avant showSaveDialog, il compile (et fonctionne) mais je reçois un avertissement que je dois vraiment utiliser await
Comment utiliser await
dans ce contexte?
Vous devez marquer votre expression lambda comme async
, comme ceci:
messageDialog.Commands.Add(new UICommand("No", async (command) =>
{
await showSaveDialog();
}));