c# - 在代码向前移动之前无法通过 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 有关)我还尝试了其他几种方法,但没有一个有效. 我开始认为这是不可能的。
请帮助阐明这一点。
解决方案
在上面的代码中,我希望在 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());
}
推荐阅读
- c# - C# xmldoc 到文档页面
- sql - MS SQL Server 2017 中的日期转换
- css - 动画翻译右箭头
- c++ - 测试树是否为二叉搜索树
- python - ModuleNotFoundError:没有名为“GeometricObject”的模块 - JetBrains pycharm IDE
- vb.net - Outlook 加载项错误
- apache-spark - 使用 Parquet 数据进行 Spark 缓存
- php - API 密钥无效。使用谷歌翻译 api 时出错
- c# - 如何定义查看属性值的样式
- laravel - 如何通过比较数据透视表中的值与 laravel 5.6 中所需表中的值来获取数据?