2011-11-02 3 views
3

J'utilise un IObservable pour faire du chargement en arrière-plan. Je veux spécifier quand ceci est fini le chargement. Comment est-ce que je peux faire ceci seulement une fois, au lieu de chaque fois que mon retriver des données fait un retour de rendement? Comment puis-je faire cela?Faire quelque chose après des finitions observables?

bool IsLoading = true; 
ObservableCollection<MyData> dataList = new 
ObservableCollection<MyData>(); 
DataLoader.RetrieveData().ToObservable(Scheduler.ThreadPool).Select(x => x).ObserverOn(Scheduler.Dispatcher).Subscribe(x => { 
    dataList.Add(x); 
    IsLoading = false;}); 

Répondre

4

Vous devriez regarder le Finally extension method, il fera exactement ce que vous voulez!

bool IsLoading = true; 
ObservableCollection<MyData> dataList = new ObservableCollection<MyData>(); 
DataLoader.RetrieveData() 
    .ToObservable(Scheduler.ThreadPool) 
    .Select(x => x) 
    .ObserverOn(Scheduler.Dispatcher) 
    .Finally(() => IsLoading = false) 
    .Subscribe(x => dataList.Add(x)); 

Cela devrait s'exécuter après la fin de la séquence observable.

+0

Les docs déclarent également qu'il fonctionne aussi sur les exceptions - existe-t-il un moyen de vérifier cela pour que le code final puisse s'adapter? Sous une exception, vous ne voulez probablement pas continuer comme d'habitude. –

+0

Vous avez raison. Je ne suis pas certain et je vais devoir y regarder et (j'espère) mettre à jour ma réponse avec quelque chose d'utile! – Kevek

+0

Oh cela a fonctionné merci – CodeMonkey

Questions connexes