Rx для .NET - Что случилось с Scheduler.Dispatcher? - PullRequest
29 голосов
/ 26 июня 2011

Я пытаюсь пройти учебный курс Дана Салливана по Rx Extensions на PluralSight.Это отличная вещь, но, к сожалению, Rx, кажется, уже изменился, хотя курс был опубликован только месяц назад.

Большинство изменений тривиально отработать (изменить с трех dll на один dll, изменитьв пространствах имен, используемых и т.д.), но я изо всех сил пытаюсь понять, что я должен использовать вместо Scheduler.Dispatcher в примере Дэна.Я не вижу ничего очевидного в свойствах, доступных в планировщике.

Вот код, который я пытаюсь получить, работая с (переделанной?) Библиотекой Rx (текущая стабильная версия v1.0.10605)

var query = from number in Enumerable.Range(1, 25) select StringWait(number.ToString());
var observableQuery = query.ToObservable(Scheduler.ThreadPool);
observableQuery.ObserveOn(Scheduler**.Dispatcher**).Subscribe(n => Results.AppendText(string.Format("{0}\n", n)));

Что я должен использовать для вызова кода наблюдателя (Results.AppendText) в исходном потоке Dispatcher?

Ответы [ 2 ]

41 голосов
/ 26 июня 2011

DispatcherScheduler был перемещен в System.Reactive.Windows.Threading сборку. Если вы используете NuGet, он находится в Rx-WPF

1 голос
/ 25 ноября 2016

По состоянию на 2016-11-25, ссылка RX-XAML.

К сожалению, Microsoft исключила RX v2.2.5 в пользу RX v3.1.0, который является полностью кроссплатформенным. Однако кроссплатформенные библиотеки не поддерживают WPF. Это означает, что сейчас трудно найти пакет NuGet, который работает с WPF.

Чтобы обойти это, если вы используете WPF + .NET 4.5, установите любой пакет NuGet с зависимостью от RX-XAML. Например, reactiveui-blend зависит от RX-XAML v2.2.5, поэтому теперь это будет работать:

setClipboard.ObserveOnDispatcher().Subscribe(o =>
{
    ...
});
...