在构造函数中调用异步方法?

:我想在构造函数中调用异步方法。这可能吗?

:我有一个称为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

回到顶部