C#Windowsストアアプリを持っています。別のMessageDialog
内のコマンドボタンの1つがクリックされたときに、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'演算子は、非同期ラムダ式内でのみ使用できます。このラムダ式を「async」修飾子でマークすることを検討してください
メソッドはawait
でマークされます。 showSaveDialogの前からawait
を削除すると、コンパイル(および動作)しますが、本当にawait
を使用する必要があるという警告が表示されます。
このコンテキストでawait
を使用するにはどうすればよいですか?
次のように、ラムダ式をasync
としてマークする必要があります。
messageDialog.Commands.Add(new UICommand("No", async (command) =>
{
await showSaveDialog();
}));