在构造函数中调用异步方法?
:我有一个称为getwritings()
JSON数据解析的方法。如果我只是调用getwritings()
一个async
方法并将其放在await
左边,那么一切都会正常运行。但是,当我LongListView
在页面中创建一个并尝试填充它时,我发现getWritings()
返回的结果令人惊讶null
,并且LongListView
为空。
为了解决这个问题,我试图改变的返回类型getWritings()
来Task<List<Writing>>
,然后通过检索结果中的构造getWritings().Result
。但是,这样做最终会
public partial class Page2 : PhoneApplicationPage{
List<Writing> writings;
public Page2()
{
InitializeComponent();
getWritings();
}
private async void getWritings()
{
string jsonData = await JsonDataManager.GetJsonAsync("1");
JObject obj = JObject.Parse(jsonData);
JArray array = (JArray)obj["posts"];
for (int i = 0; i < array.Count; i++)
{
Writing writing = new Writing();
writing.content = JsonDataManager.JsonParse(array, i, "content");
writing.date = JsonDataManager.JsonParse(array, i, "date");
writing.image = JsonDataManager.JsonParse(array, i, "url");
writing.summary = JsonDataManager.JsonParse(array, i, "excerpt");
writing.title = JsonDataManager.JsonParse(array, i, "title");
writings.Add(writing);
}
myLongList.ItemsSource = writings;
}
}
回答:
最好的解决方案是承认下载和下载设计的异步性。
换句话说,确定数据下载时应用程序的外观。让页面构造函数设置 该 视图,然后开始下载。下载完成后, 更新 页面以显示数据。
我有一篇关于异步构造函数的博客文章,您可能会觉得有用。另外,一些MSDN文章;一种是关于异步数据绑定(如果您使用的是MVVM),另一种是关于异步最佳实践的(即,应避免使用async void
)。
以上是 在构造函数中调用异步方法? 的全部内容, 来源链接: utcz.com/qa/428758.html