【发布时间】:2016-06-17 19:04:01
【问题描述】:
我正在开发一个 UWP 应用程序。当用户单击任何控件时,如果该控件执行其任务需要较长时间屏幕。 如何在 UWP 应用程序中做到这一点?
如果我是对的,我认为我们的 UWP 正在研究单线程概念。
请给我你的建议来解决这个问题。
【问题讨论】:
标签: c# win-universal-app
我正在开发一个 UWP 应用程序。当用户单击任何控件时,如果该控件执行其任务需要较长时间屏幕。 如何在 UWP 应用程序中做到这一点?
如果我是对的,我认为我们的 UWP 正在研究单线程概念。
请给我你的建议来解决这个问题。
【问题讨论】:
标签: c# win-universal-app
指示长时间运行操作的最佳方式是使用内置的ProgressRing 控件:
<ProgressRing x:Name="LoadingIndicator" />
您的长时间运行的操作应实现为async 方法。你可以这样称呼它:
try
{
LoadingIndicator.IsActive = true;
await LongOperationAsync();
}
finally
{
LoadingIndicator.IsActive = false;
}
将IsActive 设置为true 将显示进度环并开始旋转。将其设置回false 将再次隐藏并停用它。当LongOperationAsync 正在执行时,应用程序将响应并且用户将能够与之交互。
如果您使用的是 MVVM,当然可以设置一个布尔属性并将其绑定到 IsActive 属性。
不确定,您是否听说过 UWP 应用的“单线程概念”,但没有什么能阻止您的应用成为多线程。事实上,你不能直接使用Thread 类,但无论如何你都应该使用Task。
【讨论】:
Foreground属性,例如:<ProgressRing x:Name="LoadingIndicator" Foreground="Yellow" />
您可以使用 FFImageLoading 它使用各种方法来优化图像加载(包括下载/内存缓存)并且还支持加载/错误占位符:
<ff:FFImage VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
TransformPlaceholders="False"
LoadingPlaceholder="loading.png"
ErrorPlaceholder="error.png"
Height="500"
Width="500"
Source="http://loremflickr.com/600/600/nature?filename=simple.jpg">
【讨论】: