Asynchrone WinRT-Daten werden im Konstruktor geladen

8

Ich möchte einige Daten in den Konstruktor eines ViewModel laden, aber aufgrund der Async-Natur von WinRT bin ich gezwungen, asynchrone Methoden zu verwenden. Leider kann ich keinen asynchronen Konstruktor haben, deshalb versuche ich die asynchrone Methode als synchrone Methode zu verwenden. Ich bin mir sicher, dass es eine viel bessere Möglichkeit gibt, Daten (async) auf die Anwendungslast zu laden, aber mein Verstand ist im Moment leer.

Ich suche entweder nach einer Möglichkeit, meine App zu reparieren, indem ich die Gedankenlinie verwende, die ich gehe, oder um dies dauerhaft mit einer geeigneteren Methode zu beheben.

Der Code ist sehr einfach (sogar das ViewModel fehlt), nur um das Problem zu demonstrieren, dem ich gegenüberstehe.

%Vor%

Mit freundlichen Grüßen

    
Peter 21.01.2013, 23:58
quelle

2 Antworten

9

Ich habe kürzlich einen Blogbeitrag über async in Konstruktoren geschrieben.

Kurz gesagt, bevorzuge ich eine async factory-Methode:

%Vor%     
Stephen Cleary 22.01.2013, 00:08
quelle
2

Das synchrone Ausführen von asynchronen Methoden führt normalerweise zu Deadlocks, daher würde ich das nicht empfehlen. Die Sache mit View-Modellen ist, dass sie Änderungsbenachrichtigungen normalerweise über INotifyPropertyChanged PropertyChanged event unterstützen, so dass nicht alle Daten sofort verfügbar sein müssen. Wenn Ihre Daten nicht fest codiert sind, sollten Sie nicht erwarten, dass die Daten sofort angezeigt werden, und Sie möchten höchstwahrscheinlich eine Fortschrittsanzeige anzeigen, während die Daten geladen werden. Also ...

Rufen Sie in Ihrem Konstruktor eine asynchrone Initialisierungsmethode auf, ohne das Ergebnis abzuwarten (da Sie in einem Konstruktor nicht warten können) und in der Initialisierungsmethode, wenn alle Daten verfügbar sind - weisen Sie sie der Eigenschaft / den Eigenschaften zu, an die Ihre Ansicht gebunden ist PropertyChanged-Ereignis für diese Eigenschaften und verdeckt den Fortschrittsindikator, indem die Ansichtsmodelleigenschaft geändert wird, die ihre Sichtbarkeit steuert.

    
Filip Skakun 22.01.2013 00:17
quelle

Tags und Links