Xamarin表单:在异步任务中如何立即显示activityindicator?

时间:2018-02-13 02:28:04

标签: user-interface xamarin task indicator

    public async Task ShowIndicator(Func<Task> action)
    {
        actionEnabled = false;
        IndicatorVisibility = true;
        await Task.Delay(5000);
        await action.Invoke();
        IndicatorVisibility = false;
        actionEnabled = true;
    }

我使用上面的代码运行一些Task,同时通过设置IndicatorVisibility的viewmodel属性来显示指标。如果我放置了Task.Delay,它会没问题,但会减慢代码速度。如果我没有被放置它,指示器将不会显示直接因为它将设置为倒数第二个指示器可见性为假。

在执行上述代码中的操作之前,是否可以等待显示的指示器?

2 个答案:

答案 0 :(得分:0)

我有同样的问题。这有确切的问题,活动指示器永远不会出现或出现得太晚:

async void GoDetail(object obj)
{
    Busy = true;

    DetailsViewModel.Initialize(_items, this.SelectedItem);

    await App.Current.MainPage.Navigation.PushAsync(new xxxPage());

    Busy = false;

}

此问题已解决,活动指示器会立即显示...:

async void GoDetail(object obj)
{
    Busy = true;
    Device.BeginInvokeOnMainThread(async () =>
    {
        DetailsViewModel.Initialize(_items, this.SelectedItem);

        await App.Current.MainPage.Navigation.PushAsync(new xxxPage());

        Busy = false;
    });

}

答案 1 :(得分:-1)

试试此代码

 public Task ShowIndicator(Func<Task> action)
    {
        actionEnabled = false;
        IndicatorVisibility = true;

        Device.BeginInvokeOnMainThread(async () =>
        {
            await action.Invoke();
            IndicatorVisibility = false;
            actionEnabled = true;
        });
    }