首页 > 解决方案 > 在加载图像之前关闭活动指示器

问题描述

我有个问题。我的活动指示器在我的图像完成从我的 api 加载之前消失。是因为对api的调用是异步的吗?如果是这样,在关闭我的活动指示器之前,如何确保通话已完成或图像已加载到屏幕上?

我的 XAML 中的活动指示器代码如下所示:

  <ActivityIndicator IsRunning="{Binding IsBusy}"
                             IsVisible="{Binding IsBusy}"
                             VerticalOptions="Center"
                             HorizontalOptions="Center"/>

我的财产(位于视图模型库中):

private bool isBusy;
        public bool IsBusy
        {
            get { return isBusy; }
            set { SetProperty(ref isBusy, value); }
        }

这是我设置属性的代码:

  public override async void OnNavigatingTo(NavigationParameters navParams)
        {
            if(navParams.ContainsKey("query"))
            {
                var query = (string)navParams["query"];
                IsBusy = true;
                await DisplayImages(query);
                IsBusy = false;

            }
        }

谢谢!

标签: c#xamarinxamarin.formsactivity-indicator

解决方案


我不在我的电脑前,在这个设备上做起来很棘手,但是这里......

选项 1:BackgroundWorker

Async/await 不会让它在后台线程上运行,您需要在后台线程上进行加载。请注意,任务和线程是不同的

在您的班级上创建一个字段,键入BackgroundWorker。将该字段的 DoWork 事件连接为包含以下内容的方法:

            IsBusy = true;
            DisplayImages(query);
            IsBusy = false;

在这些线路曾经所在的地方,请致电RunWorkerAsync您的领域。您可以将 的值query放入一个字段中,以便可以从 DoWork 方法中使用它。

选项 2:实际线程

将 3 行放在一个名为Load(string query). 在这些行曾经所在的地方,请执行以下操作:

myNewThread = new Thread(() => Load(query));
myNewThread.Start();

我认为myNewThread需要成为一个字段,这样它就不会被垃圾收集。


推荐阅读