我有此代码:
protected override async void OnAppearing()
{
base.OnAppearing();
Subscribe();
vm.IsBusy = true;
if (Change.firstTimeCardsTab == true)
{
SetButtons(Settings.cc.ShortText());
await Task.Run(() => GetOnAppearingData());
}
}
private void GetOnAppearingData()
{
App.DB.GetData();
AddDetailSection();
SetPageDetails();
Change.firstTimeCardsTab = false;
vm.IsBusy = false;
}
vm.IsBusy = true;在页面上显示活动指示器,并且vm.IsBusy = false;我希望将其关闭。
但是,当我运行代码时,我收到一条消息:
UIKit一致性错误:您正在调用的UIKit方法只能 从UI线程调用。
有人可以建议我如何设置活动指示器以显示,然后获取数据然后设置为不显示吗?注意AddDetailSection();向XAML添加一些元素。这可能是问题吗?
答案 0 :(得分:1)
UI只能从主线程进行操作。有一种方法Device.BeginInvokeOnMainThread(Action)
可以帮助解决您的问题,更多方法可以在official documentation中找到。
只需包装所有与UI相关的操作即可:
Device.BeginInvokeOnMainThread(() => {
SetPageDetails();
// Any other actions
});