2014-10-27 48 views
0

仍在玩ReactiveUi。CreateAsyncObservable不會提高OnComplete

我目前無法確定序列何時結束。我有以下代碼:

public RxTest() 
    { 
     DownloadDocument = ReactiveCommand.CreateAsyncObservable(_ => GetItems().ToObservable()); 
     DownloadDocument.Subscribe(Console.WriteLine,() => Console.WriteLine("Done")); 
    } 

    public ReactiveCommand<int> DownloadDocument { get; set; } 

    public void RunCommand() 
    { 
     DownloadDocument.Execute(new object()); 
    } 

    IEnumerable<int> GetItems() 
    { 
     for (int i = 0; i < 20; i++) 
     { 
      Thread.Sleep(100); 
      yield return i; 
     } 
    } 

打印數字1到19,但「完成」不打印(即,不會出現OnComplete)。

相同(相似)的代碼在純粹的Rx就好了(我用Linqpad測試這一點,但是當鞋獨角成我的測試應用還曾)...

{ 
    IObservable<int> range = GetItems().ToObservable(Scheduler.NewThread); 
    range.ObserveOn(Scheduler.Default).Subscribe (Console.WriteLine,() => Console.WriteLine("Done")); 
} 

回答

0

ReactiveCommands從未OnComplete因爲任何點,您可以再次單擊該按鈕:)如果要捕獲調用ReactiveCommand的結果,請使用ExecuteAsync方法。

+0

但現在,包裝與另一命令的命令... 'ExecuteDownload = ReactiveCommand.CreateAsyncTask(Observable.Return(真),異步_ => { 變種X =等待DownloadDocument.ExecuteAsync(); CompletionState = CompletionState.Success; return x; });' 這是我想避免的那種代碼...(抱歉,不知道如何在評論中獲得正確的格式)... – enomam 2014-10-28 05:14:34

+0

,與上述,我需要訂閱ThrownExceptions在這兩個命令爲他們工作。 – enomam 2014-10-28 05:32:29