为什么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
}
}
消息对话框出现,我也可以回答,但之后程序将冻结。委托未运行。
谁能告诉我,如何解决这个问题或显示一个更好的(我的意思是工作)的例子,使这样的对话?
当你写: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
}
}