Cześć,
mam pytanie, bo szczerze, to nie jestem pewien czy nawet poprawnie to ująłem w temacie, ale mam sobie jakąś funkcję dla zdarzenia jak poniżej. Mam jakieś tam metody asynchroniczne, w tym wbudowany dialog.ShowAsync(), ale domyślam się, że to jest niepoprawne. Już sam async void mi nie pasuje, bo mi coś tam VS podkreśla na zielono i mówi, że async i void, to nie tak. :)
No więc teoretycznie powinienem używać Task, ale Task w tej sytuacji nie wchodzi w grę, bo zwyczajnie nie będzie działać. Więc moje pytanie brzmi w jaki sposób poprawnie to rozegrać? Jak poprawnie oczekiwać na rezultat jakiejś metody asynchronicznej w tej sytuacji?
private async void BtCheckAll_Click(object sender, RoutedEventArgs e)
{
var dialog = YesNoMessage("Jesteś tego pewien? Aktualny wybór zostanie usunięty.", "Uwaga");
var result = await dialog.ShowAsync();
if (result == dialog.Commands[0])
{
PRFrameLoadProgress.Visibility = Visibility.Visible;
PRFrameLoadProgress.IsActive = true;
WGridView.SelectAll();
await SaveSelectedWAsync();
PRFrameLoadProgress.Visibility = Visibility.Collapsed;
PRFrameLoadProgress.IsActive = false;
}
}
Ogólnie pomyślałem o czymś takim:
private async Task WaitForAnwserAsync()
{
var dialog = YesNoMessage("Jesteś tego pewien? Aktualny wybór zostanie usunięty.", "Uwaga");
var result = await dialog.ShowAsync();
if (result == dialog.Commands[0])
{
PRFrameLoadProgress.Visibility = Visibility.Visible;
PRFrameLoadProgress.IsActive = true;
WGridView.SelectAll();
await SaveSelectedWAsync();
PRFrameLoadProgress.Visibility = Visibility.Collapsed;
PRFrameLoadProgress.IsActive = false;
}
}
private void BtCheckAll_Click(object sender, RoutedEventArgs e)
{
WaitForAnwserAsync().ConfigureAwait(false);
}
Czuję jednak, że ominąłem po prostu komunikat, a nie rozwiązałem problem. Ktoś może mi wytłumaczyć jak najlepiej radzić sobie z czymś takim? Dodam, że chodzi o C# 7.2. Dzięki.