在ContentDialog打开时进行工作

时间:2018-03-27 04:41:35

标签: c# windows uwp

我正在使用UWP框架为Windows 10 Mobile Enterprise制作应用程序。我有一些文件要循环保存到磁盘,我想显示一个弹出窗口ProgressBar,在保存文件时阻止用户。我想更新ProgressBar每个循环迭代,并在最后删除它。

我想我可以制作一个包含ContentDialog的自定义ProgressBar,并在开头显示ContentDialog。我很困惑如何执行此操作,因为ContentDialog ShowAsync()方法会在对话框打开时阻止。

我的猜测是我必须在新的线程/任务/任何事情中执行ShowAsync()或文件循环。是否有最佳实践方法?

注意 - 进度条不能,根据要求只需进入当前页面。它必须是某种类型的弹出窗口,阻止用户直到它被代码关闭。

1 个答案:

答案 0 :(得分:0)

ContentDialog实际上并不适合这种情况。问题是ContentDialog表示模态对话框,这意味着应用程序窗口被阻止,直到用户关闭对话框。 Task ShowAsync()方法的构建方式使您可以等待用户执行内容对话框操作,并且无法在除UI之外的任何其他线程上打开对话框。

您有三种可能的解决方案:

  • 在您的应用中添加一种“状态栏”,表示某项操作正在进行中,当用户点击该动作时,请显示一个Popup,其中包含进度详细信息(可以通过点击其他位置来解除,但是用户可以从“状态栏”中再次显示它)
  • 实施辅助视图,它将显示操作的进度。您可以在documentation中找到有关辅助视图的更多信息。另请注意,辅助视图具有不同的UI线程,因此在更新其UI时必须牢记这一点(您必须使用该视图的Dispatcher
  • 在您的应用中创建一个“假窗口”,这将只是所有其他UI上方的UI元素。然而,这感觉不对,所以我建议不要这样做。