Резюме. Я хотел бы вызвать асинхронный метод в конструкторе. Возможно ли это?
Детали. У меня есть метод под названием 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;
}
}