Невозможно получить ввод от пользователя через MessageDialog до того, как код переместится вперед - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь вызвать MessageDialog, который будет запрашивать ввод данных пользователем, а затем продолжить этот ввод.

Ниже приведен код для этого.

XAML

<Button Content="Click" Click="Button_Click"/>

XAML.CS

public MainPage()
{
    this.InitializeComponent();
}
private int _res;
private void Button_Click(object sender, RoutedEventArgs e)
{
    Click_Helper(sender, e);
    System.Diagnostics.Debug.WriteLine(_res.ToString());
    //Some other work will be done here
}

private async Task Click_Helper(object sender, RoutedEventArgs e)
{
    MessageDialog msgbox = new MessageDialog("Hello there");

    msgbox.Commands.Clear();
    msgbox.Commands.Add(new UICommand { Label = "Yes", Id = 0 });
    msgbox.Commands.Add(new UICommand { Label = "No", Id = 1 });

    var result = await msgbox.ShowAsync();
    _res = (int)result.Id;
}

В приведенном выше коде я хочу, чтобы _res был установлен до Debug Writeline, но почему-то я не могу этого достичь. К сожалению для UWP, кажется, что MessageDialog не имеет возможности использовать его синхронно.

Я пытался использовать метод .Wait () для Задачи, но он вызывает тупик (я где-то читал об этом, и он имел какое-то отношение к тому, что поток пользовательского интерфейса блокировал себя от показа MessageDialog) Я также попробовал несколько других методов, но ни один не работает. Я начинаю думать, что это невозможно.

Пожалуйста, помогите пролить свет на это.

1 Ответ

2 голосов
/ 01 июля 2019

В приведенном выше коде я хочу, чтобы _res был задан до Debug Writeline,

Пожалуйста, добавьте ключевое слово await перед методом Click_Helper.

private async void Button_Click(object sender, RoutedEventArgs e)
{
    await Click_Helper(sender, e);
    System.Diagnostics.Debug.WriteLine(_res.ToString());

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...