Comment puis-je envoyer un événement PropertyChanged d'un abonnement à un intervalle IObservable basé

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

Question

Je reçois un « UnauthorizedAccesExpection - l'accès inter-fil non valide » exception lorsque je tente de soulever un événement PropertyChanged à partir d'un abonnement à une collection IObservable créée par Observable.Interval ()

.

Avec ma connaissance de filetage limité Je suppose que l'intervalle se passe sur un autre thread alors que l'événement veut se passer sur le thread d'interface utilisateur ??? Une explication du problème serait très utile.

Le code ressemble un peu:

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

Les solutions?

Edit:

Ce code est en cours d'exécution d'un ViewModel pas DependencyObject.

Était-ce utile?

La solution

Modifier Je confondais avec SubscribeOn ObserveOn. J'ai mis à jour ma réponse

Vous pouvez résoudre votre problème en mettant votre intervalle sur le fil répartiteur:

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

Vous pourriez être en mesure d'utiliser ObserveOnDispatcher mais qui impliquerait des fils sauter alors je vous recommande contre:

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

Autres conseils

Utilisation: -

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

Modifier

Puisque vous devez faire du ViewModel voir cette répondre par Jeff Wilcox et son excellent blog sur le sujet: notifications de modification de la propriété pour les applications Silverlight multithread .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top