У меня есть приложение для winform, и наблюдаемая установка типа:
Form form = new Form();
Label lb = new Label();
form.Controls.Add(lb);
Observable.Interval(TimeSpan.FromSeconds(1))
.Subscribe(l => lb.Text = l.ToString());
Application.Run(form);
Это не работает, так как l => lb.Text = l.ToString()
не будет запущена на главном потоке, который создал форму, но я не могу понять, как заставить ее запуститься на этом потоке. Я предполагаю, что должен использовать IObservable.SubscribeOn
, который принимает либо IScheduler
, либо SynchronizationContext
, но я не знаю, как получить синхронизационный контекст основного потока, и единственными планировщиками, которые я смог найти, были статические свойства Scheduler
, такие как Scheduler. CurrentThread
, Immediate
, NewThread
, TaskPool
и ThreadPool
, ни один из которых не работал.
Моя Rx версия 1.0.10621.