C# 我可以让ContentDialog.Async()等待UWP中的另一个ContentDialog.Async()吗?

C# 我可以让ContentDialog.Async()等待UWP中的另一个ContentDialog.Async()吗?,c#,.net,events,uwp,C#,.net,Events,Uwp,我正在运行一个有2个页面的UWP应用程序。在MainPage中,我启动一个ContentDialog异步方法,它在一个框架中打开page2。在第2页,我有一个次要的内容对话框,我可以通过按下按钮打开它。 在Button_Click方法中,我想关闭正在运行的Async()方法,并等待启动下一个方法,直到我100%确定第一个方法已关闭 我现在遇到的问题是,如果我在第二个ContentDialog打开后按得太快,程序就会崩溃 我尝试过线程睡眠,但这只会延迟问题 主页(客户主页): 第2页(交易页面):

我正在运行一个有2个页面的UWP应用程序。在MainPage中,我启动一个ContentDialog异步方法,它在一个框架中打开page2。在第2页,我有一个次要的内容对话框,我可以通过按下按钮打开它。 在Button_Click方法中,我想关闭正在运行的Async()方法,并等待启动下一个方法,直到我100%确定第一个方法已关闭

我现在遇到的问题是,如果我在第二个ContentDialog打开后按得太快,程序就会崩溃

我尝试过线程睡眠,但这只会延迟问题

主页(客户主页):

第2页(交易页面):

因此,只要您在打开确认对话框后立即单击该对话框,而不是调用确认对话框的主要按钮,单击速度就可以了。

这是在中介绍的

每个线程一次只能打开一个ContentDialog。尝试打开两个ContentDialog将引发异常,即使它们试图在单独的应用程序窗口中打开

因此,当第一个
ContentDialog
仍在运行时,无法启动第二个
contDialog

致以最诚挚的问候。

这是在中介绍的

每个线程一次只能打开一个ContentDialog。尝试打开两个ContentDialog将引发异常,即使它们试图在单独的应用程序窗口中打开

因此,当第一个
ContentDialog
仍在运行时,无法启动第二个
contDialog


最诚挚的问候。

正如@Richard Zhang-MSFT在之前的回答中所说的那样

因此,当第一个对话框启动时,无法启动第二个对话框 ContentDialog仍在运行

如果您希望在打开新的
ContentDialog
之前关闭上一页的
ContentDialog
,可以使用下面的代码关闭当前打开的任何
ContentDialog

var openedpopups = VisualTreeHelper.GetOpenPopups(Window.Current);
foreach (var popup in openedpopups)
{
   if(popup.Child is ContentDialog)
   {
      (popup.Child as ContentDialog).hide();
   }
}

正如@Richard Zhang-MSFT在之前的回答中所说的那样

因此,当第一个对话框启动时,无法启动第二个对话框 ContentDialog仍在运行

如果您希望在打开新的
ContentDialog
之前关闭上一页的
ContentDialog
,可以使用下面的代码关闭当前打开的任何
ContentDialog

var openedpopups = VisualTreeHelper.GetOpenPopups(Window.Current);
foreach (var popup in openedpopups)
{
   if(popup.Child is ContentDialog)
   {
      (popup.Child as ContentDialog).hide();
   }
}

我知道这一点,这就是为什么我使用
.Hide()就在我打开下一个之前。但是,如果我的点击速度很快,并且在新内容对话框打开后以超过一秒钟的速度点击其中的某个内容,那么
.Hide()
方法在下一个
Async()
运行之前永远不会完成,导致程序“认为”我正在运行两个内容对话框。如果我在按下任何键之前等待1秒,程序将按预期工作。您好,当您调用
ContentDialog.Hide()
ContentDialog
时,程序处于关闭状态。实际上,
ContentDialog
在执行
wait ContentDialog.ShowAsync()
之前不会处于关闭状态。因此,调用
Hide
方法并不意味着您的
ContentDialog
已完成当前线程的工作。啊,我明白了!通过将ShowAsync()方法分成两个方法解决了这个问题,我用wait从buttonclick方法调用了这两个方法!谢谢你的澄清!也许我们可以使用弹出按钮我知道这一点,这就是为什么我使用
.Hide()就在我打开下一个之前。但是,如果我的点击速度很快,并且在新内容对话框打开后以超过一秒钟的速度点击其中的某个内容,那么
.Hide()
方法在下一个
Async()
运行之前永远不会完成,导致程序“认为”我正在运行两个内容对话框。如果我在按下任何键之前等待1秒,程序将按预期工作。您好,当您调用
ContentDialog.Hide()
ContentDialog
时,程序处于关闭状态。实际上,
ContentDialog
在执行
wait ContentDialog.ShowAsync()
之前不会处于关闭状态。因此,调用
Hide
方法并不意味着您的
ContentDialog
已完成当前线程的工作。啊,我明白了!通过将ShowAsync()方法分成两个方法解决了这个问题,我用wait从buttonclick方法调用了这两个方法!谢谢你的澄清!也许我们可以使用弹出按钮关闭ContentDialog,使用
confirmationDialog.Hide()在我的
确认对话框\u主按钮中单击
(第2页)。然后我运行publicstatic
CustomerInfoPage.transactionContent.ShowAsync()(第1页)在这种情况下,使用上述代码检查“任意内容”对话框是否仍处于打开状态。如果它是打开的,那么在while循环中等待它,然后调用
showsync()
I使用
confirmationDialog.Hide()关闭ContentDialog在我的
确认对话框\u主按钮中单击
(第2页)。然后我运行publicstatic
CustomerInfoPage.transactionContent.ShowAsync()(第1页)在这种情况下,使用上述代码检查“任意内容”对话框是否仍处于打开状态。如果它是打开的,则在while循环中等待它,然后调用
ShowAsync()
var openedpopups = VisualTreeHelper.GetOpenPopups(Window.Current);
foreach (var popup in openedpopups)
{
   if(popup.Child is ContentDialog)
   {
      (popup.Child as ContentDialog).hide();
   }
}