2013-04-15 8 views
0

ReactiveUI를 사용하고 있습니다. 버튼에서 웹 서비스를 호출하려고합니다. 이 호출이 성공하면 UI를 업데이트하려고합니다.ReactiveAsyncCommand.RegisterAsyncAction - 완료 알림이 누락 되었습니까?

RegisterAsyncFunction으로 비동기 함수를 등록 할 때 구독 할 수있는 관찰 결과가 표시됩니다. 이렇게하면 비동기 코드가 반환 될 때 코드를 실행할 수있는 기회가 주어지며 ObserveOnDispatcher()을 사용하여 UIThread에서 코드를 실행할 수 있습니다.

유일한 문제는 - 내 명령에 반환 값이 없습니다.

숫자 RegisterAsyncAction은이 용도로 사용되지만이 작업이 언제 완료되는지는 알 수 없습니다.

이 경우 ReactiveAsyncCommand를 사용하는 올바른 방법은 무엇입니까? 당신이 RegisterAsyncAction에서 버그를 발견 한 것처럼

답변

1

hwhoops, 그것은 단지, 그것은 당신의 응용 프로그램으로 복사하여 붙여 넣기, 그 동안 수정 된 버전을 IObservable<Unit>

를 반환해야합니다, 확장 기능 메소드의 모습 :

/// <summary> 
    /// RegisterAsyncAction registers an asynchronous method that runs 
    /// whenever the Command's Execute method is called and doesn't return a 
    /// result. 
    /// </summary> 
    /// <param name="calculationFunc">The function to be run in the 
    /// background.</param> 
    public static IObservable<Unit> RegisterAsyncAction(this IReactiveAsyncCommand This, 
     Action<object> calculationFunc, 
     IScheduler scheduler = null) 
    { 
     return This.RegisterAsyncFunction(x => { calculationFunc(x); return Unit.Default; }, scheduler); 
    } 

ObserveOnDispatcher() UIThread에서 코드를 실행할 수도 있습니다.

실제로이 작업을 수행 할 필요가 없습니다. RxUI는 이미 Register*의 결과가 UI 스레드로 돌아올 것을 보장합니다.

+0

'RegisterAsyncFunction'으로 전환하여 더미 값을 반환했습니다. 조금 후에 ReactiveAsyncCommand에 'AsyncCompletedNotification'을 발견했습니다. 나는 그것을 시도하지 않았지만 가능한 해결책처럼 보였다? – Vegar

+0

반환 된 메서드에서 데이터가 손실 되더라도 Register * –

+0

의 반환 결과를 사용하는 것이 더 좋습니다.이 경우 반환 할 반환 값이 없습니다. 그러나'IObservable'을 반환하는'RegisterAsyncAction'은 어쨌든 더 좋습니다. 감사! – Vegar