Wie kann ich Versand ein Property Ereignisses von einem Abonnement für ein Intervall basierend IObservable

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

Frage

Ich erhalte eine ‚UnauthorizedAccesExpection - Ungültige verkanten Zugang‘ Ausnahme, wenn ich versuche, ein Property Ereignis auszulösen innerhalb eines Abonnements zu einer IObservable Sammlung durch Observable.Interval erstellt ()

.

Mit meinem begrenzten Threading Weiß Ich gehe davon aus, dass das Intervall auf einem anderen Thread geschieht, während das Ereignis auf dem UI-Thread passieren will ??? Eine Erklärung des Problems wäre sehr nützlich sein.

Der Code sieht ein wenig wie:

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

Jede Lösungen?

Edit:

Dieser Code aus einem Viewmodel nicht DependencyObject ausgeführt wird.

War es hilfreich?

Lösung

Edit: Ich war verwirrend SubscribeOn mit ObserveOn. Ich habe meine Antwort aktualisiert

Sie können das Problem, indem Sie Ihr Intervall auf dem Dispatcher-Thread lösen:

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

Alternativ können Sie in der Lage sein ObserveOnDispatcher zu verwenden, aber das würde Springen Fäden verwickeln, damit ich davon abraten würde:

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

Andere Tipps

Verwendung: -

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

Bearbeiten

Da Sie dies aus dem Viewmodel tun müssen, finden Sie in dieser Antwort von Jeff Wilcox und sein ausgezeichneter Blog zum Thema: Property Änderungsbenachrichtigungen für multithreaded Silverlight-Anwendungen .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top