MahApps ShowMessageAsync

Alexandr T.

Имеется такой код (в упрощенном варианта)

private async void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{ var x = await this.ShowProgressAsync("Пожалуйста подождите...", string.Empty); x.Maximum = 100; x.SetIndeterminate(); await Task.Run(() => { for (int i = 0; i < 100; i++) { x.SetProgress(i); x.SetMessage($"Осталось {100 - i}"); if (i == 50) { <---- здесь нужно вывести сообщение (например, произошла какая-то ошибка) } // code } }); await x.CloseAsync().ConfigureAwait(false);
}

И в общем вопрос, как вывести ShowMessageAsync внутри await Task.Run, так чтобы оно работало подобно MessageBox.Show, т.е. чтобы Task ждал реакции пользователя на данное сообщение. Если просто вставить ShowMessageAsync будет вылет из программы, т.к. вызывающий поток не может получить доступ к MainWindow, а если обернуть в Dispatcher.BeginInvoke, то Task продолжает выполняться не дожидаясь ответа пользователя на ShowMessageAsync

1 ответ

Alexandr T.

Помог такой код

Dispatcher.Invoke(() => this.ShowMessageAsync("", "")).Wait();

licensed under cc by-sa 3.0 with attribution.