Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么MessageDialog不工作?_C#_Windows Phone 8_Microsoft Metro - Fatal编程技术网

C# 为什么MessageDialog不工作?

C# 为什么MessageDialog不工作?,c#,windows-phone-8,microsoft-metro,C#,Windows Phone 8,Microsoft Metro,我的目标是在一个便携库中创建一个messagedialog,这样我就可以在Metro C#/XAML和Windows Phone中使用它 我在谷歌上搜索了一下,发现了这样一条:什么符合我的需要 在给出示例之后,我编写了以下代码: public static async Task<string> Egyszerű(string Fejléc, string Szöveg, params string[] Gombfeliratok) { string kérdésreAdottVá

我的目标是在一个便携库中创建一个messagedialog,这样我就可以在Metro C#/XAML和Windows Phone中使用它

我在谷歌上搜索了一下,发现了这样一条:什么符合我的需要

在给出示例之后,我编写了以下代码:

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;
}
消息对话框出现,我也可以回答,但在那之后程序将冻结。委托未运行


有谁能告诉我,如何解决这个问题,或者展示一个更好的(我指的是工作)示例来创建这样的对话框吗?

当您编写:
Kérdés.Egyszerű(“确定?”,“确定吗,blablabla?”,“是”,“否”)。结果
您正在阻塞UI线程,直到异步操作完成,以便可以访问其结果

Egyszerű
正在计划在UI线程中运行一个continuation(在
等待
之后的所有内容)

因此,您的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
    }
}

你怎么称呼这个方法?您是在呼叫
Wait
,还是在呼叫链上的某个方法而不是
Wait
?更新了问题。
private async void someEvent(object sender, ItemClickEventArgs e)
{
    if (await Kérdés.Egyszerű("SURE?", "Are you sure, blablabla?", "YES", "NO") 
        == "YES")
    {
        //stuff
    }
}