c# - 在加载图像之前关闭活动指示器
问题描述
我有个问题。我的活动指示器在我的图像完成从我的 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;
}
}
谢谢!
解决方案
我不在我的电脑前,在这个设备上做起来很棘手,但是这里......
选项 1:BackgroundWorker
Async/await 不会让它在后台线程上运行,您需要在后台线程上进行加载。请注意,任务和线程是不同的。
在您的班级上创建一个字段,键入BackgroundWorker
。将该字段的 DoWork 事件连接为包含以下内容的方法:
IsBusy = true;
DisplayImages(query);
IsBusy = false;
在这些线路曾经所在的地方,请致电RunWorkerAsync
您的领域。您可以将 的值query
放入一个字段中,以便可以从 DoWork 方法中使用它。
选项 2:实际线程
将 3 行放在一个名为Load(string query)
. 在这些行曾经所在的地方,请执行以下操作:
myNewThread = new Thread(() => Load(query));
myNewThread.Start();
我认为myNewThread
需要成为一个字段,这样它就不会被垃圾收集。
推荐阅读
- javascript - 错误类型错误:无法读取未定义的属性“替换”
- python - 在有向图中查找结束节点
- android - 当有一个带按钮的 RecyclerView 时,SetFocus 无法使用硬件键盘处理 Activity 的 EditText
- node.js - MongoDB Node JS UpdateOne 错误:检测到循环依赖
- angular - 离子构建已经开始失败,“装饰器不支持函数表达式”
- r - 有没有办法从列中的最后一个非空白值中提取?
- java - 无法在继承类的构造函数中重新分配最终变量
- python - pybind11中如何处理指针类型参数?
- sql - 将varchar转换为时间戳,然后按ticketid添加时间组
- symfony4 - JMS Serializer 不会在 Symfony 4 中加载元数据配置