Wie kann ich diese asynchrone Methode in meinen Xamarin Forms aufrufen, wenn meine App startet?

8

Wenn meine App zum ersten Mal gestartet wird, muss ich einige zuvor gespeicherte Daten laden. Wenn es existiert - & gt; dann gehe zur TabbedPage Seite. Sonst eine Login-Seite.

Ich bin mir nicht sicher, wie kann ich meine asynchrone Methode in der App oder sogar in einer anderen Methode aufrufen?

Wie kann ich das tun?

Hier ist mein Code ..

%Vor%

Warum ist LoadStorageDataAsync async? Weil die Bibliothek PCLStorage verwendet und das alles asynchron ist.

Kann jemand bitte helfen?

    
Pure.Krome 30.07.2015, 13:08
quelle

4 Antworten

10

Soweit die Dokumentation sagt , haben Sie Application.OnStart Ereignis, das Sie überschreiben können:

  

Anwendungsentwickler überschreiben diese Methode, um Aktionen auszuführen, wenn   Anwendung startet.

Sie können Ihre async -Methode dort ausführen, wo sie tatsächlich erwartet werden kann:

%Vor%     
Yuval Itzchakov 30.07.2015, 13:17
quelle
5

Machen Sie einen Schritt zurück und überlegen Sie, wie die Benutzeroberfläche funktioniert. Wenn Ihre App anfänglich angezeigt wird, erstellt das Framework Ihr ViewModel und View und zeigt dann so bald wie möglich etwas sofort an. Das ist ein ungeeigneter Ort für Netzwerkaktivitäten.

Stattdessen sollten Sie start die asynchrone Operation starten und dann (synchron) eine "loading" -Seite laden. Wenn der asynchrone Vorgang abgeschlossen ist, können Sie zu Ihren anderen Seiten (oder zu einer "Fehler" -Seite wechseln, wenn der Benutzer z. B. keinen Netzwerkzugriff hat).

Ich bin mir nicht sicher, ob Xamarin Forms in der Lage ist, Daten an ein Seitenobjekt zu binden, aber wenn ja, dann ist mein NotifyTaskCompletion type kann hilfreich sein.

    
Stephen Cleary 30.07.2015 13:45
quelle
2

Konstruktoren können nicht async sein, Event-Handler können jedoch sein. Wenn Sie können, sollten Sie diese Logik in den OnStart Event-Handler (oder einen geeigneteren) verschieben:

%Vor%

Wenn Sie nicht können, haben Sie keine bessere Wahl, als einfach synchron auf diese Aufgabe zu blockieren, um das Ergebnis zu erhalten. Sie sollten jedoch beachten, dass dies zu Deadlocks führen kann.

    
i3arnon 30.07.2015 13:19
quelle
0

Die Verwendung von asynchronen Methoden in Konstruktoren wird als fehlerhafter Code angesehen. Sie sollten in einem Klassenkonstruktor keine asynchronen Methoden verwenden.

Sie könnten versuchen, es zu ändern, um Deadlocks zu vermeiden:

%Vor%

... aber ich werde es nicht empfehlen.

    
Daniel Luberda 30.07.2015 15:01
quelle