WinRT C#MessageDialog.ShowAsync - 未经授权的访问异常 -

时间:2013-04-10 01:09:55

标签: c# xaml windows-runtime

我认为我不需要粘贴代码。这是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();
    }

1 个答案:

答案 0 :(得分:3)

嗯,问题的核心是你在尝试播放MessageDialog时还在玩游戏。

可能有更优雅的方法,但您可以使用ShowAsync的返回来识别所选命令,然后显式调用其处理程序,这样第一个弹出窗口会在第二个弹出窗口出现之前被解除。对此进行的快速测试表明这将起作用。