public static class MessageDialogExtensions
{
// 最後にContinuousShowAsyncに指定されたMessageDialogのShowAsyncの戻り値
private static Task<IUICommand> _current = Task.FromResult<IUICommand>(null);
// 同時にContinuousShowAsyncが呼ばれた時に_currentの変更を同期化するためのロックオブジェクト
private static object _lockContinuous = new object();
/// <summary>
/// MessageDialogを表示中に別のMessageDialogを単純に表示しようとするとエラーになるので、エラーにせずに順番に表示するためのメソッド。
/// 使い方はShowAsyncと同じ。
/// このメソッドを呼んだ後にキャンセルはできないので注意。
/// </summary>
/// <param name="dialog"></param>
/// <returns></returns>
public static async Task<IUICommand> ContinuousShowAsync(this MessageDialog dialog)
{
lock (_lockContinuous)
{
Func<Task<IUICommand>, Task<IUICommand>> chain = async (t) =>
{
return await dialog.ShowAsync().AsTask();
};
_current = _current.ContinueWith(chain).Unwrap();
}
return await _current;
}
}