Asynchrone Methode im Konstruktor aufrufen?

Zusammenfassung: ich möchte sagen, dass eine asynchrone Methode in einen Konstruktor. Ist das möglich?

Details: ich habe eine Methode namens getwritings() Parsen der JSON-Daten. Alles funktioniert gut, wenn ich nur call getwritings() in einem async Methode und setzen await nach Links. Allerdings , wenn ich ein LongListView in meine Seite, und versuchen Sie, zu bevölkern, ich finde, dass getWritings() ist überraschend Rückkehr null und die LongListView leer ist.

Um dieses problem anzugehen, ich habe versucht, ändern Sie den Rückgabetyp der getWritings() zu Task<List<Writing>> und dann abrufen das Ergebnis im Konstruktor über getWritings().Result. Tun Sie jedoch, die bis Ende Blockierung der UI-thread.

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;
    }
}

InformationsquelleAutor der Frage KBB | 2014-04-13

Schreibe einen Kommentar