【问题标题】:Activity Indicator is dismissed before images are loaded在加载图像之前关闭活动指示器
【发布时间】:2018-07-02 22:22:32
【问题描述】:

我有一个问题。我的活动指示器在我的图像完成从我的 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;

            }
        }

谢谢!

【问题讨论】:

  • Async/await 不会让它在后台线程上运行。 DisplayImages是如何实现的?
  • 检查 DisplayImages 方法是否包含 async 关键字。
  • 只需调用一个 api 端点并将它获取的对象设置为它应该绑定到的属性。它确实包含 async 关键字。
  • 你需要使用后台线程。
  • 怎么样?有了这个? "System.Threading.Tasks.Task.Run(() => { //在这里添加你的代码。}).ConfigureAwait(false);"

标签: c# xamarin xamarin.forms activity-indicator


【解决方案1】:

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

选项 1:BackgroundWorker

Async/await 不会让它在后台线程上运行,您需要在后台线程上进行加载。请注意Tasks and threads are different

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

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

在这些行以前所在的位置,请在您的领域致电RunWorkerAsync。您可以将query 的值放入一个字段中,以便在 DoWork 方法中使用它。

选项 2:实际线程

将这 3 行放在一个名为 Load(string query) 的方法中。在这些行以前所在的位置,执行以下操作:

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

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

【讨论】:

  • @Euridice01 编辑答案以添加另一个选项。
【解决方案2】:

在您的方法中使用:

Device.BeginInvokeOnMainThread(async () =>
{
   //load your images here
   //Lastly set IsBusy to false
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多