Пример #1
0
        private IDisposable BindAvatars(
            IAvatarManager avatarManager,
            IObservable <Range> visibleRangeChanges)
        {
            var prevRange = new Range(0, 0);

            return(visibleRangeChanges
                   .SelectMany(range =>
            {
                var releases = avatarManager.ReleaseAvatars(_items, prevRange, range);
                var loads = avatarManager.LoadAvatars(_items, prevRange, range);

                return releases.Concat(loads);
            })
                   .SubscribeOn(TaskPoolScheduler.Default)
                   .ObserveOn(RxApp.MainThreadScheduler)
                   .Subscribe(action => action()));
        }
Пример #2
0
        private IDisposable BindAvatarLoading(
            IObservable <VisibleRangeNotifiedArgs> visibleRangeChanges,
            IAvatarManager avatarManager)
        {
            var prevRange = new Range(0, 0);

            return(visibleRangeChanges
                   .ObserveOn(TaskPoolScheduler.Default)
                   .SubscribeOn(RxApp.MainThreadScheduler)
                   .Subscribe(args =>
            {
                var range = args.Range;

                avatarManager.ReleaseAvatars(_items, prevRange, range)
                .DisposeWith(_serviceDisposable);

                avatarManager.LoadAvatars(_items, prevRange, range)
                .DisposeWith(_serviceDisposable);

                prevRange = range;
            }));
        }