كيف يمكنني إرسال حدث خاص بالممتلكات من الاشتراك إلى فاصل زمني قابل للرسالة

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

سؤال

أحصل على استثناء "غير مصرح به للوصول عبر الخيوط" عندما أحاول رفع حدث خاص بالممتلكات من داخل الاشتراك في مجموعة قابلة للرسوم التي تم إنشاؤها من خلال الملاحظة. Enterval ().

بفضل معرفتي المحدودة في الخيوط ، أفترض أن الفاصل الزمني يحدث في سلسلة أخرى بينما يريد الحدث أن يحدث في موضوع واجهة المستخدم ؟؟؟ سيكون تفسير المشكلة مفيدًا جدًا.

يشبه الرمز إلى حد ما:

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

أي حلول؟

تعديل:

يتم تنفيذ هذا الرمز من ViewModel وليس التبعية.

هل كانت مفيدة؟

المحلول

تعديل: كنت مربكا للاشتراك مع Observeon. لقد قمت بتحديث إجابتي

يمكنك حل مشكلتك عن طريق وضع الفاصل الزمني الخاص بك على موضوع المرسل:

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