首页 > 解决方案 > 在代码向前移动之前无法通过 MessageDialog 检索用户的输入

问题描述

我正在尝试调用将提示用户输入的 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;
}

在上面的代码中,我希望在 Debug Writeline 之前设置 _res,但不知何故我无法实现。不幸的是,对于 UWP,MessageDialog 似乎没有任何选项让我同步使用它。

我一直在尝试对 Task 使用 .Wait() 方法,但它会导致死锁(我在某处读到此内容,它与 UI 线程锁定自身以显示 MessageDialog 有关)我还尝试了其他几种方法,但没有一个有效. 我开始认为这是不可能的。

请帮助阐明这一点。

标签: c#asynchronousuwp

解决方案


在上面的代码中,我希望在 Debug Writeline 之前设置 _res,

请在方法await之前添加关键字Click_Helper

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

}

推荐阅读