سؤال

لدي كائن inotifyPropertyChanged ، فو. أقوم بتحويل FOO إلى تيار يمكن ملاحظته باستخدام طريقة Fromevent الخاصة بـ RX:

var myFoo = new Foo();
var eventStream = Observable.FromEvent<PropertyChangedEventArgs>(myFoo, "PropertyChanged");

الآن أريد أن أستمع إلى خاصية معينة تم تغييرها ، وإذا .Progress == 100 ، إلغاء الاشتراك:

eventStream
   .Where(e => myFoo.Progress == 100)
   .Subscribe(OnFooFinished);

كيف يمكنني إلغاء الاشتراك عند التقدم == 100؟ إذا قمت بإضافة مكالمة هاتفية (1) بعد شرط. Where ، فهل هذا تلقائيًا إلغاء الاشتراك؟

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

المحلول

خيار واحد هو استخدام قيمة الإرجاع Subscribe:

IDisposable subscription = eventStream.Where(e => myFoo.Progress == 100)
                                      .Subscribe(OnFooFinished);

...

// Unsubscribe
subscription.Dispose();

أنا مشتبه فيه ذلك باستخدام Take(1) من شأنه بالفعل إلغاء الاشتراك ، وهو مايو كن أكثر تراييا من أجلك. بعد أن نظرت إليها قليلاً ، أنا متأكد من هذا سيكون قم بإلغاء الاشتراك ، حيث ستطلق الرسالة "المكتملة" ، والتي تفلت بشكل عام تلقائيًا. ليس لدي وقت للتحقق من ذلك بالتأكيد في الوقت الحالي ، أخشى :(

نصائح أخرى

يمكنك استخدام طريقة takehile:

eventStream.TakeWhile(e => myFoo.Progress != 100);

خارق إرادة التخلص من التسلسل الأساسي الذي يمكن ملاحظته عندما يعود مسنده خطأ ، سوف تفعل ذلك ليس يجب أن تتصل بالتخلص يدويًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top