내 윈도우 8 스토어 앱에서 다음과 같은 코드가 있습니다CoreDispatcher는
public static void ConvertUpdateStreamToCollection<T>(this IObservable<UpdateInfo<T>> input, ObservableCollection<T> list)
{
input
.ObserveOnDispatcher()
.Subscribe(upInfo => UpdateList(upInfo, list));
}
는 ObserveOnDispatcher가 주전 것을 이것은 종종 백그라운드 스레드에서 호출되며 관찰 가능 목록을 업데이트 할 때 UI 디스패처에 있어야합니다. 우선 앱을 실행할 때 제대로 작동하는 것처럼 보입니다.
하지만 단위 테스트를 통해 테스트 해 보겠습니다. MSTest가 내장되어 있습니다. 그러나 ObserveOnDispatcher는 CoreDispatcher를 가져올 유효한 Window가 없다고 불평합니다.
스택 오버플로의 다른 위치에서 WPF에 대한 해결 방법을 보았습니다. 하지만 디스패처를 실행시키는 것처럼 보입니다. 이 오류는 더 근본적인 것 같습니다. 알려진 해결 방법이 있습니까?
감사합니다. 귀하의 게시물은 제가 Rx 소스 코드 (https://rx.codeplex.com/SourceControl/changeset/view/7881e17c060b#Rx/NET/Source/System.Reactive.Windows.Threading/Reactive/Linq/)를 볼 수 있음을 깨닫게했습니다. DispatcherObservable.cs). – Gordon
빠른 질문이 여기 있습니다. 당신은 Dispatcher.CurrentDIspatcher를 사용하고 있습니다 ... 그것은 윈도우 스토어 앱의 전체 수명 동안 똑같이 될 것입니까? "Window"객체와 관련된 다른 객체를 얻게됩니까? – Gordon
내가 생각했던 또 다른 솔루션은 테스트 모드에서 실행될 때 null op로 변경되는 셸 ObserveOnMyDispatcher를 작성한 것이고 WD 환경에서 실행될 때 "공식"ObserveOnDispatcher는 Dispatcher가 실행되는 동안 변경 될 가능성이 있으므로 WS 응용 프로그램에서 실행 중입니다 ... – Gordon