2011-01-10 19 views
3

So, ich bin gerade erst mit. WCF RIA Services und Silverlight.WCF RIA Services - Maßnahmen ergreifen, wenn alle Daten geladen sind

Hier ist, was ich tun muss: Ich muss ein paar Anrufe an meinen Domain-Service, um Daten zu laden. Also verwende ich die Load() Methode für das Context Objekt.

Ich muss einige Maßnahmen ergreifen, wenn alle Abfragen abgeschlossen sind. Ich sehe, dass ich einen Rückruf für jede einzelne Last angeben kann, aber was ich wirklich tun möchte, ist einen Rückruf zu registrieren, der ausgeführt wird, wenn alle Lasten abgeschlossen sind.

Gibt es eine integrierte Möglichkeit, dies mit RIA-Diensten/Silverlight zu tun, oder muss ich meine eigenen rollen?

BTW: Ich mache nichts so verrückt - ich will nur nicht, dass mein Formular interaktiv ist, bis die Daten geladen sind (ich will den UI-Thread nicht blockieren, ich möchte nur zeigen ein Fortschrittsbalken/tanzender Hampster, bis alle Daten geladen sind)

Antwort

2

Diese http://blogs.msdn.com/b/smccraw/archive/2009/07/15/a-net-ria-services-data-load-batch-manager.aspx funktionierte gut für mich.

Wenn Sie nicht möchten, dass die Benutzer mit der Seite interagieren, verwenden Sie einen Aktivitätsindikator (ich denke, dass es jetzt im Silverlight Toolkit ist), um die App beim Laden zu blockieren.

+0

Dieser Code hat ziemlich genau das gemacht, was ich mir vorgestellt habe. Es hat jedoch eine mögliche Race Condition. Da die Ladevorgänge sofort ausgeführt werden, ist es unwahrscheinlich, aber möglicherweise können Ladevorgänge abgeschlossen werden, bevor Sie dem Stapelmanager Lasten hinzufügen. Wenn es so geklappt hat, dass der Manager "leer" geschaut hat, würde dies dazu führen, dass das abgeschlossene Ereignis vorzeitig ausgelöst wird. – JMarsch

+0

Nun, nach weiteren Recherchen, ignorieren Sie meinen vorherigen Kommentar. Es sieht so aus, als ob die Loads nicht sofort ausgeführt werden, sondern nachdem du von der Methode, in der du warst, zurückkehrst. Ich glaube nicht, dass es in diesem Code eine Race Condition gibt. – JMarsch

1

Es ist nichts eingebaut, also müssten Sie Ihre eigenen rollen.

Ich vermute, Sie würden einen Zähler jedes Mal stoßen, wenn eine Abfrage gestartet wird, und dann innerhalb des Rückrufs verringern Sie es erneut. Wenn es null erreicht, feuern Sie ein Ereignis, das besagt, dass keine ausstehenden Anforderungen mehr bestehen.

+0

So sah es auch für mich aus. Das lässt mich fragen, ob ich etwas Seltsames mache. Mein Ziel ist einfach, dass Benutzer nicht mit dem Formular interagieren sollten, bis alle Daten geladen sind. Gibt es eine andere Art, dass ich das tun sollte? – JMarsch

+0

Klingt wie die Art von Sache, die gut wäre, automatisch durch den generierten Code hinzugefügt zu werden. Aber stattdessen müssen Sie es selbst hinzufügen. Was ist eine Schande. –

0

Würde so etwas wie link für Sie arbeiten?

+0

Ich habe über das CTP gelesen - ich kann definitiv sehen, wie diese Syntax für das Silverlight-Modell gut ist. Ich werde wahrscheinlich nicht in der Lage sein, das CTP für dieses Projekt zu verwenden - wir sind ein ISV, unsere Software ist im Außendienst installiert und ich kann mich nicht auf die Vorabversionstechnologie verlassen. Es ist definitiv cooles Zeug. – JMarsch

Verwandte Themen