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