我正在使用UWP框架为Windows 10移动的企业版制作一个应用。我有许多文件要在循环中保存到磁盘,我希望在保存文件时显示一个弹出窗口ProgressBar
,阻止用户。我希望在每次循环迭代时更新ProgressBar
,并在最后将其删除。
我想我可以创建一个包含ProgressBar
的自定义ContentDialog
,并在开始时显示ContentDialog
,但我不知道如何做到这一点,因为ContentDialog
的ShowAsync()
方法在对话框打开时会阻塞。
我的猜测是我必须在一个新的线程/任务/任何东西中执行ShowAsync()
或文件循环。对于这一点有什么最佳实践方法吗?
注意-根据要求,进度条不能进入当前页面。它必须是某种弹出窗口,阻止用户进入,直到被代码关闭。
2条答案
按热度按时间ddrv8njm1#
ContentDialog
实际上并不真正适合这种场景。问题是ContentDialog
代表一个模态对话框,这意味着应用窗口将被阻止,直到用户关闭对话框。Task ShowAsync()
方法的构建方式使您可以等待用户执行内容对话框操作,并且您无法在UI以外的任何其他线程上打开对话框。您有三种可能的解决方案:
Popup
与进度细节(这可以通过点击其他地方关闭,但用户可以从“状态栏”再次显示它)Dispatcher
)eit6fx6z2#
一个迟到的回复,但如果有人在未来遇到这种情况,另一个可能的解决方案是用进度条阻塞页面的其余部分。如果视图的内容包含在一个网格中,您可以将进度栏作为网格中的最后一个元素,这会使它显示在所有其他UI元素的顶部。您可能必须用它 Package ProgressBar '的自己的网格,这样您就可以将ProgressBar放在页面的中心,但在ProgressBar运行时,使用网格覆盖并有效地禁用页面的其余部分。
我在应用程序中加载戒指时会做类似的事情: