2011-11-02 29 views
3

我正在使用IObservable在後臺執行一些加載。我想指定何時完成加載。我怎樣才能做到這一次,而不是每次我的數據retriver確實收益回報?我該怎麼做呢?可觀察完成後再做點什麼?

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;}); 

回答

4

你應該看看Finally extension method,它會做你想做的!

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)); 

這應該在可觀察序列終止後執行。

+0

該文檔還聲明,它也運行在異常 - 是否有一種方法來檢查,以便最終代碼可以適應?在例外情況下,您可能不希望像往常一樣繼續。 –

+0

你說得對。我不確定,我將不得不尋找,並(希望)更新我的答案有用的東西! – Kevek

+0

哦,這工作謝謝你 – CodeMonkey

相關問題