我正在开发一款壁纸应用。因此我使用的是Xamarin.Forms。有一个包含所有可用壁纸的滚动视图,在其上方,用户可以看到所选壁纸更大。
问题在于,当我启动App时,我可以看到它有点滞后。 (图片正在加载中)我并不喜欢这样。看起来不太好。所以我开始了一个新任务,因为我从嵌入式资源中获取图像。但这并没有太多时间。耗时的是在视图中显示图像。我无法在任务中执行此操作,因为它必须是访问视图的STA线程。
我想这样:
应用程序启动您会看到正在运行的活动指示器 在不阻止UI线程的情况下从资源加载图像 图像被加载到视图中而不会阻止UI线程 活动指示消失,主网格出现在前面
So here is my code:
检查此pastebin代码。
谢谢。
好的,我没有解决问题,但我有一个解决方案:
Task.Factory.StartNew(() =>
{
return InitializeImages();
}).ContinueWith(r =>
{
Device.BeginInvokeOnMainThread(() =>
{
if (r.Result == GlobalSettings.ImageCount)
ButtonsGrid.ColumnDefinitions[1].Width = 0;
else
ButtonsGrid.ColumnDefinitions[1].Width = GridLength.Star;
for (int i = 0; i < r.Result; i++)
{
ImagesGrid.Children.Add(_previewImages[i]);
ImagesStackLayout.Children.Add(_images[i]);
}
});
Thread.Sleep(2000);
Device.BeginInvokeOnMainThread(async () =>
{
await ShowWallpaperInPreview();
await Loading(false);
});
});
我让它在后台滞后。过了一会儿,我从加载变为普通视图。这种方式落后于背景(谁关心=)
答案 0 :(得分:1)
让您的应用保持响应并覆盖问题中未提及的案例的非常好的候选者是名为FFImageLoading的开源项目。
以下是支持的功能列表:
还有更多!
查看Advanced Usage doc和Wiki了解详情。