C# 为什么ContentDialog和Prism导航会破坏我的UWP应用程序?

C# 为什么ContentDialog和Prism导航会破坏我的UWP应用程序?,c#,windows-runtime,win-universal-app,prism,C#,Windows Runtime,Win Universal App,Prism,我在一个sessionstateaware页面上显示一个内容对话框,我可以很好地关闭该对话框,并且可以在同一页面上重新打开另一个对话框,次数可以根据需要而定。当我离开并返回并尝试重新打开对话框时,会出现以下错误: WinRT信息:任何时候只能打开一个ContentDialog。 其他信息:异步操作未正确启动 我尝试了很多方法,但似乎每当我离开并返回时,不知何故,对控件的引用丢失了,并且创建了另一个控件 以下是问题领域的一个小片段: if(asyncCommand != null) asyncCo

我在一个sessionstateaware页面上显示一个内容对话框,我可以很好地关闭该对话框,并且可以在同一页面上重新打开另一个对话框,次数可以根据需要而定。当我离开并返回并尝试重新打开对话框时,会出现以下错误:

WinRT信息:任何时候只能打开一个ContentDialog。 其他信息:异步操作未正确启动

我尝试了很多方法,但似乎每当我离开并返回时,不知何故,对控件的引用丢失了,并且创建了另一个控件

以下是问题领域的一个小片段:

if(asyncCommand != null)
asyncCommand.Cancel();

var result = new ContentDialogResult();
if (CanOpenNewDialog)
{

    CanOpenNewDialog = false;
    MyContentDialog.Title = "Homebuyer Options - " + apt.Customer1FullName;
    asyncCommand = MyContentDialog.ShowAsync();

    result = await asyncCommand.AsTask();
}

在多次导航时,ContentDialouge面临相同的问题。应用程序崩溃时说“异步操作未正确启动。任何时候只能打开一个ContentDialog。”

我找到了解决方案。例如,应该等待ContentDialog正在调用的Show Dialouge方法。因此,将ShowDialouge方法作为一项任务

    protected async override void OnNavigatedTo(NavigationEventArgs e)
 {
   await ShowDialouge();
 }

 private async Task ShowDialouge()
  {
    ContentDialog dialouge = new ContentDialog();
    await dialouge.ShowAsync();
  }

问题是,当我使用prism导航时,每次回到页面时,我都会重新订阅创建对话框的事件。要解决这个问题,我只需调用unsubscribe on Navigated From。

没有其他人遇到过这个问题吗?打开一个内容对话框,导航到另一个页面,返回并尝试打开一个对话框,然后砰的一声_eventAggregator.GetEvent().Unsubscribe(ShowHomebuyerSelectionDialog);