Как я могу отправить недвижимое событие от подписки на интервал на основе IBServable

StackOverflow https://stackoverflow.com/questions/2591627

Вопрос

Я получаю «несанкционированную клавишу» - неверный исключений доступа к перекрестным потокам, когда я пытаюсь поднять недвижимое событие, изнутри подписку на iBservable Collection, созданную через наблюдаемый.

С моим ограниченным потоковым знанием я предполагаю, что интервал происходит на каком-то другом потоке, пока событие хочет случиться на теме UI ??? Объяснение проблемы было бы очень полезным.

Код выглядит немного похоже на:

var subscriber = Observable.Interval(TimeSpan.FromSeconds(1))
                .Subscribe(x =>
                {
                    Prop = x; // setting property raises a PropertyChanged event
                });

Любые решения?

Редактировать:

Этот код выполняется из ViewModel, а не зависитностьобекты.

Это было полезно?

Решение

Редактировать: Я был запутанным подписчиком с наблюдателем. Я обновил свой ответ

Вы можете решить вашу проблему, поместив свой интервал на резьбу диспетчера:

var subscriber = Observable.Interval(TimeSpan.FromSeconds(1), Scheduler.Dispatcher) 
                .Subscribe(x => 
                { 
                    Prop = x; // setting property raises a PropertyChanged event 
                }); 

В качестве альтернативы вы могли бы использовать ObserveOnDispatcher Но это будет включать в себя прыжки, поэтому я бы порекомендовал против него:

var subscriber = Observable.Interval(TimeSpan.FromSeconds(1)) 
                .ObserveOnDispatcher()
                .Subscribe(x => 
                { 
                    Prop = x; // setting property raises a PropertyChanged event 
                }); 

Другие советы

Использовать:-

var subscriber = Observable.Interval(TimeSpan.FromSeconds(1))
            .Subscribe(x =>
            {
                Dispatcher.BeginInvoke(() => Prop = x);
            });

Редактировать

Поскольку вам нужно сделать это с ViewModel, см. отвечать Джефф Уилкос и его отличный блог на теме: Уведомления об изменении свойств для многопоточных приложений Silverlight.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top