C# Xamarin:在视图中加载图像

C# Xamarin:在视图中加载图像,c#,asynchronous,xamarin,xamarin.forms,task,C#,Asynchronous,Xamarin,Xamarin.forms,Task,我正在开发一个壁纸应用程序。因此,我使用Xamarin.Forms。有一个包含所有可用墙纸的滚动视图,在它上面,用户可以看到所选的一张更大的墙纸 问题是,当我启动应用程序时,我可以看到它有点滞后。(图像正在视图中加载)我不喜欢这样。看起来不太好。因此,我开始了一项新任务,从嵌入的资源中获取图像。但这并没有浪费那么多时间。耗时的事情是在视图中显示图像。我不能在任务中这样做,因为它必须是STA线程才能访问视图 我想要这样: 当你看到一个跑步活动指示器时,应用程序就会启动 图像是从资源加载的,不会阻塞

我正在开发一个壁纸应用程序。因此,我使用Xamarin.Forms。有一个包含所有可用墙纸的滚动视图,在它上面,用户可以看到所选的一张更大的墙纸

问题是,当我启动应用程序时,我可以看到它有点滞后。(图像正在视图中加载)我不喜欢这样。看起来不太好。因此,我开始了一项新任务,从嵌入的资源中获取图像。但这并没有浪费那么多时间。耗时的事情是在视图中显示图像。我不能在任务中这样做,因为它必须是STA线程才能访问视图

我想要这样:

当你看到一个跑步活动指示器时,应用程序就会启动 图像是从资源加载的,不会阻塞UI线程 图像被加载到视图中,而不会阻塞UI线程 活动指示器消失,主栅格出现在前面

So here is my code:
检查此代码

多谢各位

好的,我没有解决问题,但我有一个解决方案:

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);
            });
        });
Task.Factory.StartNew(()=>
{
返回初始化图像();
}).ContinueWith(r=>
{
Device.beginInvokeMainThread(()=>
{
if(r.Result==GlobalSettings.ImageCount)
ButtonsGrid.ColumnDefinitions[1]。宽度=0;
其他的
ButtonsGrid.ColumnDefinitions[1]。宽度=GridLength.Star;
for(int i=0;i
{
等待ShowReview();
等待加载(假);
});
});

我让它落后于背景。在很短的时间后,我从加载切换到普通视图。这样一来,它就落后于后台(who care=)

一个让你的应用程序保持快速响应并涵盖你的问题中没有提到的案例的非常好的候选者是一个名为的开源项目。

以下是支持的功能列表:

  • 可配置磁盘和内存缓存
  • 使用同一图像源(url、路径、资源)的多个图像视图将只使用一个缓存在内存中的位图(内存使用量较少)
  • 错误和加载占位符支持
  • 图像可以自动降采样到指定大小(减少内存使用)
  • 可以重试映像下载(RetryCount、RetryDelay)
还有更多

有关更多详细信息,请查看和