【发布时间】:2021-05-21 09:32:19
【问题描述】:
我想知道是否有更好的方法将异步数据加载到属性中。现在我创建一个异步函数并在属性的 Get 部分引发一个任务,如下所示:
private ObservableCollection<CProyecto> prope;
public ObservableCollection<CProyecto> Prope
{
get
{
if (prope == null)
{
Task.Run(()=> LoadData()).Wait();
}
return proyectos;
}
set
{
prope = value;
RaisePropertyChanged();
}
}
async private Task LoadData()
{
Prope = await clsStaticClassDataLoader.GetDataFromWebService();
}
这种方法有效,但我不喜欢使用 .Wait,因为如果服务没有快速响应,它会冻结屏幕。
你能在这件事上指导我吗?
提前致谢
【问题讨论】:
-
如果你调用Wait()方法来阻塞调用线程,那么启动一个新任务有什么意义......?
-
关于异步属性,您应该阅读以下内容:blog.stephencleary.com/2013/01/async-oop-3-properties.html
-
使用
loaded event从外部来源获取数据。使事件异步并绑定到您的集合。 -
最差。财产。永远。
-
埃尔多,loaded_event?从 xaml 页面? .谢谢