2

コードを貼り付ける必要はないと思います。これはC#です。

基本的に、MessageDialog を作成して表示し、UICommandInvokedHandler をボタンから呼び出します。

その Handler 内で、別の MessageDialog.ShowAsync が呼び出される可能性のある他の項目を実行します。ただし、この 2 番目の呼び出しでは Unathorized Access Exception が発生します。

UI THreadで新しいMessageDialogを強制的に作成しようとするイベントを発生させるなど、いくつかのことを試しましたが、同じことをしました。

これを回避する方法について何か提案はありますか? 大まかに言えば、「よろしいですか?はい/いいえ」と言うダイアログを表示しようとしています。はいの場合、実行の根幹を行い、他のダイアログをポップアップしてランダムなエラー情報を提供できます。

OK コード:

    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();
    }
4

1 に答える 1

3

問題の核心は、MessageDialog がまだ実行されている間に MessageDialog を呼び出そうとしていることです。

より洗練されたアプローチがあるかもしれませんが、ShowAsyncの戻り値を使用して選択したコマンドを識別し、そのハンドラーを明示的に呼び出すことができます。これにより、最初のポップアップが 2 番目のポップアップが表示される前に閉じられます。この端の簡単なテストは、それが機能することを示しています。

于 2013-04-10T06:50:33.733 に答える