Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, okon, Вы писали:
O>>O>>inputObservable
O>> .Throttle(500)
O>> .CombineLatest(input => GetList(input))
O>> .OnNext( result => texbBox.text = result );
O>>
O>>Ну и по событию кидать в inputObservable новые данные
S>Давайте весь код, чтобы сразу запустить. Я дал весь, на форму только кинуть 2 TextBox.
S>И добавьте textBox2.Clear(); после задержки в 500 мс.
Сори, но мне лично лень делать под тебя отдельный проект и проверять компиляцию.
Я показал как выглядит решение на Rx, если тебя прям весь код интересует то могу написать примерно с точностью до типов, а дальше сам ковыряй.
Те количество строк не должно измениться в решении , это все решение :
Observable<string[]> inputObservable = new Observable<string[]>();
// любое место где инициализация формы
void Init()
{
inputObservable
.Throttle(500)
.CombineLatest(input => GetList(input))
.Subscribe( result => texbBox.text = result );
}
void KeyDown(EventArgs e) => inputObservable.OnNext(e);
Вот это твой эквивалент этой же логики
private volatile int _lastRequestId;
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
_lastRequestId++;
FillItems();
}
private async void FillItems()
{
var requestId = _lastRequestId;
await Task.Delay(500);
if (requestId != _lastRequestId)
return;
textBox2.Clear();
var items = await MakeRequest(textBox1.Text);
if (_lastRequestId != requestId)
return;
textBox2.Text = string.Join("\r\n", items);
}
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов