我试图显示ActivityIndicator
在我试图更新数据库上的列字段时按下按钮后,它没有显示?问题是什么?
在以下"我的代码"上:
ActivityIndicator ai = new ActivityIndicator()
{
HorizontalOptions = LayoutOptions.CenterAndExpand,
Color = Color.Black
};
ai.IsRunning = true;
ai.IsEnabled = true;
ai.BindingContext = this;
ai.SetBinding(ActivityIndicator.IsVisibleProperty, "IsBusy");
ProcessToCheckOut = new Button { Text = "Set Inf" };
ProcessToCheckOut.Clicked += (object sender, EventArgs e) =>
{
this.IsBusy = true;
UserUpdateRequest user=new UserUpdateRequest();
user.userId = CustomersPage.ID;
appClient.UpdateInfo(user);
this.IsBusy = false;
Navigation.PushAsync(new CheckoutShippingAddressPage(appClient));
};
Content = new StackLayout
{
Children={
tb,
ai,
ProcessToCheckOut
}
};
2条答案
按热度按时间gstyhher1#
this.IsBusy=true;
和this.IsBusy=false;
之间的代码都不是异步的。因此,所发生的情况是,您启用了指示器,但随后继续在主线程上工作,然后在UI有机会更新之前禁用了指示器。要解决这个问题,你需要把
appClient.UpdateInfo(user)
放到一个异步代码块中(沿着PushAsync和禁用活动指示器,可能还有一些其他代码)。如果你没有UpdateInfo()
的异步版本,那么你可以把它推到一个后台线程中...假设它所做的任何工作实际上都可以安全地在后台线程中运行。请注意,我还使用了
Device.BeginInvokeOnMainThread()
在后台工作完成后将执行封送回主线程。tp5buhyn2#
您的端点必须是getasync或postasync,并带有await