我认为我不需要粘贴代码。这是C#。
基本上,我有一个MessageDialog Created,Show it,并且从一个按钮调用了UICommandInvokedHandler。
在Handler中,我做了其他可能导致调用另一个MessageDialog.ShowAsync的项目。但是,第二次调用是提供Unathorized Access Exception。
我尝试了一些事情,比如导致一个事件试图强制在UI THread上创建新的MessageDialog,但这也做了同样的事情。
有关如何解决此问题的任何建议?粗略地说,我试图给一个Dialog说“你确定吗?是/否”如果是,它会执行执行的内部并且可以弹出其他对话框来提供随机错误信息。
好的代码:
public static async void WriteMessageDialog(string message, string buttonText1, UICommandInvokedHandler handler1, string buttonText2, UICommandInvokedHandler handler2)
{
MessageDialog msgDlg = new MessageDialog(message);
msgDlg.Commands.Add(new UICommand(buttonText1, handler1));
msgDlg.Commands.Add(new UICommand(buttonText2, handler2));
// Set the default button to be enabled and default on escape key pressed
msgDlg.DefaultCommandIndex = 0;
msgDlg.CancelCommandIndex = 0;
// Show the window
await msgDlg.ShowAsync();
}
后来.....
// THey original Message Dialog
RTUtilities.WriteMessageDialog(
_resourceLoader.GetString("DetelePersonConfirm"),
_resourceLoader.GetString("Delete"),
new UICommandInvokedHandler(this.CommandDeletePersonHandler), _resourceLoader.GetString("Cancel"),
new UICommandInvokedHandler(this.CommandCancelHandler));
打电话给这个.....
private async void CommandDeletePersonHandler(IUICommand command)
{
MessageDialog msgDlg = new MessageDialog(_resourceLoader.GetString("DeleteIndividualError"));
await msgDlg.ShowAsync();
}
答案 0 :(得分:3)
嗯,问题的核心是你在尝试播放MessageDialog时还在玩游戏。
可能有更优雅的方法,但您可以使用ShowAsync的返回来识别所选命令,然后显式调用其处理程序,这样第一个弹出窗口会在第二个弹出窗口出现之前被解除。对此进行的快速测试表明这将起作用。