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?
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:
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.
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:
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.
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.
Tags und Links c# async-await asynchronous xamarin.forms