Xamarin.Formen - BeginInvokeOnMainThread für eine asynchrone Aktion
Ich bin vertraut mit den Regeln über die Aktualisierung UI-Elemente auf dem UI-thread mit dem Gerät.BeginInvokeOnMainThread, jedoch habe ich eine operation, die ausgeführt werden muss, die auf dem UI-thread, ist wirklich eine Aufgabe.
Beispielsweise die Push/PopAsync Methoden auf XLabs.Formen.Mvvm scheinen sich falsch Verhalten, die auf iOS, es sei denn, Sie sind aufgerufen, die auf dem UI-thread. Es gibt auch ein anderes Beispiel in der Acr.UserDialogs Bibliothek für die Anzeige von Popups etc.
Ich weiß, dass eine Aktion async ist im Grunde die Erstellung eines async void lambda und läuft Gefahr, die Schaffung einer Blockade im Fall einer Ausnahme, natürlich ich don ' T wollen dies geschehen kann.
Hat jemand einen workaround für das durchführen von asynchronen Operationen, die auf dem UI-thread, nicht um die Kennzeichnung der Aktion als async?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur sicherstellen, dass Sie die Ausnahmen behandeln in Ihrem Handeln, und Sie sollten in Ordnung sein. Das problem, das Sie beschrieben, tritt auf, wenn Sie nicht behandeln von Ausnahmen. Unten ist ein sehr einfaches Beispiel für eine asynchrone Methode aus dem main thread.
Fallen diese hier für den Fall, jemand will auf das Ende einer Aktion, die ausgeführt werden auf dem Haupt-thread
Task
Objekt ohnehin, wenn nach dem await beendet Sie nicht wissen, ob der aktuelle thread ist der Haupt-thread ist oder nicht, könnten Sie einfach warten, es auf Ihre eigenen, ohne dass neue Helfer, die Sie erstellt habenSeit Xamarin.Formulare 4.2 es gibt jetzt eine helper-Methode zum ausführen von Aufgaben auf dem Haupt-thread und dort auf Sie warten.
Mehrere überladungen vorhanden sind, sollten die Szenarien:
Zugehörige PR: https://github.com/xamarin/Xamarin.Forms/pull/5028
HINWEIS: die PR hatte einige Fehler, der in der v4.2, so verwenden Sie nicht diese in v4.1.