Информация об изменениях

Сообщение Re[3]: Reactive Extensions от 24.11.2019 13:50

Изменено 24.11.2019 17:01 Shmj

Re[3]: Reactive Extensions
Здравствуйте, okon, Вы писали:

O>Очень простая задача встречающаяся практически в любом интерфейсе — нужно отобразить список Items[] GetList(string filter) который формируется долго, задержка плавающая т.е. может от 0.1 секунды ответ прийти до 5 секунд, пользователь вводит данные в поле filter, запрос сразу отправлять не требуется, только после 500 миллисекунд после того как пользователь перестал вводить данные. Нужно отображать актуальный список в UI соотвествующий последнему введеному filter.


Примерно так (набросал идею):

        private volatile bool _changed;

        private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            _changed = true;
            FillItems();
        }

        private async void FillItems()
        {
            _changed = false;
            await Task.Delay(500);

            if (_changed)
                return;

            textBox2.Clear();

            var items = await MakeRequest(textBox1.Text);

            if (_changed)
                return;

            textBox2.Text = string.Join("\r\n", items);
        }

        Random _random = new Random();
        private async Task<List<string>> MakeRequest(string q)
        {
            await Task.Delay(_random.Next(100, 5000));
            return await Task.FromResult(new List<string>()
            {
                q + "пункт 1 ",
                q + "пункт 2",
                q + "пункт 3",
            });
        }



O>Потом немного усложним условие — есть еще Checkbox который также отвечает за алгоритм фильтрации ( например Ignore Case в фильтре ).


И чем это усложнит?
Re[3]: Reactive Extensions
Здравствуйте, okon, Вы писали:

O>Очень простая задача встречающаяся практически в любом интерфейсе — нужно отобразить список Items[] GetList(string filter) который формируется долго, задержка плавающая т.е. может от 0.1 секунды ответ прийти до 5 секунд, пользователь вводит данные в поле filter, запрос сразу отправлять не требуется, только после 500 миллисекунд после того как пользователь перестал вводить данные. Нужно отображать актуальный список в UI соотвествующий последнему введеному filter.


Примерно так (набросал идею), обновленная версия: http://rsdn.org/forum/dotnet/7596599.1
Автор: Shmj
Дата: 24.11.19