为什么MessageDialog不起作用

本文关键字:不起作用 MessageDialog 为什么 | 更新日期: 2023-09-27 18:05:29

我的目标是有一个messagedialog,这是一个可移植的库,所以我可以在Metro c#/XAML和Windows Phone中使用它。

我搜索了一下,发现了这个:http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.popups.messagedialog,什么符合我的需求。

在它的例子之后,我做了这个代码:

public static async Task<string> Egyszerű(string Fejléc, string Szöveg, params string[] Gombfeliratok)
{
  string kérdésreAdottVálasz = null;
  MessageDialog kérdés = new MessageDialog(Szöveg, Fejléc);
  foreach (string válasz in Gombfeliratok)
  {
    kérdés.Commands.Add(new UICommand(válasz, new UICommandInvokedHandler(delegate { kérdésreAdottVálasz = válasz; })));
  }
  kérdés.DefaultCommandIndex = 0;
  kérdés.CancelCommandIndex = 1;
  await kérdés.ShowAsync();
  //esetleges utófeldolgozás helye itt
  //..
  return kérdésreAdottVálasz;
}

}

并将其放入便携式库。

我从主程序中调用它:

private void someEvent(object sender, ItemClickEventArgs e)
{
  if (Kérdés.Egyszerű("SURE?", "Are you sure, blablabla?", "YES", "NO").Result == "YES")
  {
    //stuff
  }
}

消息对话框出现,我也可以回答,但之后程序将冻结。委托未运行。

谁能告诉我,如何解决这个问题或显示一个更好的(我的意思是工作)的例子,使这样的对话?

为什么MessageDialog不起作用

当你写:Kérdés.Egyszerű("SURE?", "Are you sure, blablabla?", "YES", "NO").Result时,你正在阻塞UI线程,直到异步操作完成,以便你可以访问它的结果。

Egyszerű正在调度一个延续(await之后的所有内容)在UI线程中运行,当它可用时。

所以你的UI线程正在等待Egyszerű完成,Egyszerű正在等待UI线程可用,然后才能完成。僵局。

在等待操作完成时不需要阻塞UI线程。你需要"异步所有的方式",这样UI保持响应,并能够执行最底部的事件的延续。

private async void someEvent(object sender, ItemClickEventArgs e)
{
    if (await Kérdés.Egyszerű("SURE?", "Are you sure, blablabla?", "YES", "NO") 
        == "YES")
    {
        //stuff
    }
}