Буферизуйте данные из курсора базы данных, сохраняя интерфейс

У меня есть каталог базы данных, который заполнен, и курсор, который можно использовать для извлечения объектов. Этот каталог, очевидно, может быть очень большим, и я хотел бы использоватьReactiveUI буферизировать данные, сохраняя привязанность данных интерфейса и отзывчивость. Я следовал за шагамиВот перевести мойIEnumerable вIObservable, как показано здесь:

public class CatalogService
{
   ...

   public IObservable<DbObject> DataSource
   {
        get
        {
            return Observable.Create<DbObject>(obs =>
            {
                var cursor = Database.Instance.GetAllObjects();
                var status = cursor.MoveToFirst();

                while (status == DbStatus.OK)
                {
                    var dbObject= Db.Create(cursor);
                    obs.OnNext(dbObject);

                    status = cursor.MoveToNext();
                }

                obs.OnCompleted();

                return Disposable.Empty;
            });
        }
    }
}

На мой взгляд, класс (в частности,Loaded событие), я подписываюсь на источник данных и использую метод буфера в надежде сохранить отзывчивость пользовательского интерфейса.

    public ObservableCollection<DbObject> DbObjects { get; set; }

    private async void OnLoad(object sender, RoutedEventArgs e)
    {
        var observableData = CatalogService.Instance.DataSource.Publish();
        var chunked = observableData.Buffer(TimeSpan.FromMilliseconds(100));
        var dispatcherObs = chunked.ObserveOnDispatcher(DispatcherPriority.Background);
        dispatcherObs.Subscribe(dbObjects =>
        {
            foreach (var dbObject in dbObjects)
            {
                DbObjects.Add(dbObject);
            }
        });

        await Task.Run(() => observableData.Connect());
        await dispatcherObs.ToTask();
    }

Результат, к сожалению, совершенно противоположный. Когда мой контроль зрения (который содержит простойListBox привязанный к даннымDbObjects свойство) загружает, не показывает никаких данных, пока не будет перечислен весь каталог. Только тогда пользовательский интерфейс обновляется.

Я новичок в ReactiveUI, но я уверен, что он способен на выполнение поставленной задачи. У кого-нибудь есть какие-либо предложения или указатели, если я использую это неправильно?

Ответы на вопрос(2)

Ваш ответ на вопрос