2015-01-01 2 views
2

ReactiveUI 6.0에서 제대로 UI 스레드에 정렬 화합니다. 이 Observable을 여러 뷰 모델에 전달합니다. 일부보기 모델에서 EventArgs는 ToProperty를 사용하여 속성으로 설정됩니다. 다른 사람들은 구독하고 DoStuff (TM)입니다.어떻게이 같은 관찰 가능한이

내가 알고 싶은 것은 이들이 항상 UI 스레드에 마샬링되도록하는 방법입니다. 모든 ToProperty 및 Subscribe 호출에 ObserveOn (RxApp.Main ...)을 추가하려고 시도했지만 작동하지 않았습니다.

posChangeObs 
      .Select(x => x.LinearFrameIndex) 
      .Subscribe(x => this.CurrentLinearFrameIndex = x, 
      e => 
      { 
       throw e; 
      }); 
+0

처럼 내 App.xaml.cs를 시작 코드 "RxApp.MainThreadScheduler = CoreDispatcherScheduler.Current"의 스케줄러를 설정할 때까지 또한 .. ObserverOn와 함께 몇 가지 문제가 있었다 이것은 당신이 속성 도우미를 사용할 수있는 시나리오입니다 ? MainThreadScheduler에서 자동으로 예약하는 https://github.com/reactiveui/rxui-design-guidelines (속성 도우미로 스크롤) –

답변

2

대답은 ObserveOn(RxApp.MainThreadScheduler)을 추가했다 : 예를 들어 구독 여기

posChangeObs.ToProperty(this, x => x.CurrentPosition, out _CurrentPosition); 

된다 : 여기

은 어떻게 지금 ToProperty를 사용하고 크로스 스레드 예외를 얻기의 예입니다 FromEventPattern이 반환됩니다. 이 var posChangeObs = Observable.Publish<Position>( Observable.FromEventPattern<EventHandler<PositionEventArgs>,PositionEventArgs>(h => x.PositionChange += h, h => x.PositionChange -= h) .ObserveOn(RxApp.MainThreadScheduler) .Select(x => ...));