是否可以从获取已使用 await 调用的数据(非异步)的方法更改 UI?



我有这个代码:

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 添加一些元素。这可能是问题所在吗?

UI 只能从主线程进行操作。有一种方法Device.BeginInvokeOnMainThread(Action)可以帮助您解决问题,更多信息可以在官方文档中找到。

只需通过它包装所有与 UI 相关的操作:
Device.BeginInvokeOnMainThread(() => { SetPageDetails(); // Any other actions });

最新更新