#c# #.net #winforms
#c# #.net #winforms
Вопрос:
У меня есть список, который обновляется каждые X секунд. Я хочу знать каждые X секунд, были ли добавлены новые элементы в список и что это за элементы.
Например, у меня есть в списке:
index 0 : this is a test
Index 1 : this is number one
Затем через X секунд был добавлен новый элемент:
index 0 : this is a test
Index 1 : this is number one
Index 2 : Im a new item
Что я хочу сделать, так это проверить наличие любых новых элементов, это может быть один элемент или 20 через X секунд, и все эти элементы должны быть добавлены в начало списка. Таким образом, каждый раз последний элемент будет первым.
Если был добавлен только один элемент, он будет первым, если было добавлено 20 элементов, тогда элемент 20 будет первым в списке, а элемент 1 из 20 будет под номером 20.
Я спрашивал раньше, но теперь я знаю больше, что мне нужно.
И просто делать inser(0,…) нехорошо.
newText.Add(t[i]);
newText.Add(dateTime[i]);
newText.Add(string.Empty);
Если я делаю newText.Вставить(0,t[i]); это не покажет ничего позже.
Если я использую свойство Insert, оно не будет создавать список так, как я хотел, в конце он добавит дату и время, все из них, а также пустые строки…
Вот почему я не использовал Insert .
Редактировать
Я забыл упомянуть, что мне нужно сохранить формат списка:
newText.Add(t[i]);
newText.Add(dateTime[i]);
newText.Add(string.Empty);
Когда я имею в виду последний элемент, я имею в виду последние 3 индекса.
Каждые 3 индекса в списке похожи на одну группу / блок.
Формат списка выглядит следующим образом:
Индекс 0 текст: привет, мир Индекс 1 дата и время: 22/6/2014 Индекс 2 пробел / пустая строка:
Поэтому, когда я хочу перейти к последнему элементу в верхней части списка, я имею в виду, что для exmaple индекс 28 будет иметь индекс 0, затем индекс 29 с индексом 1 и индекс 30 с индексом 2. Поскольку в индексе 28 у меня есть текстовый индекс 29 дата и время и индекс 30 пустая строка.
Вот как выглядит список:
Комментарии:
1. Если вы хотите, чтобы последний добавленный элемент был первым, рассмотрите возможность использования
Stack<T>
вместоList<T>
2. Вы можете создать свою собственную структуру списка, которая предоставляет события, или перегрузить существующую.
3. BindingList<T> и ObservableCollection<T> имеют события, позволяющие узнать, когда список изменился
4. если это должен быть список, вы можете сохранить результат list . Длина до целого числа и, через 20 секунд, проверьте, есть ли список. Длина по-прежнему равна этому целому числу. Если нет, вычтите целочисленное значение из . Значение длины. Поскольку список гарантированно упорядочен, самые новые элементы всегда будут последними.
5. Обновил мой вопрос, извините. Забыл, что самое главное — сохранить формат списка, и когда я имею в виду последний элемент, я имею в виду последние 3 индекса (элемент / блок / группа все связаны друг с другом). Поэтому все они должны двигаться вверх. Каждый раз, когда добавляется новый элемент (3 индекса), они должны быть вверху, как я объяснил в отредактированной части вопроса.
Ответ №1:
как насчет использования ObservableCollection<T>
?
http://msdn.microsoft.com/library/ms668604 (v = против 110).aspx
с помощью этого вы можете отслеживать список в режиме реального времени.
что также было бы возможно, отслеживать CollectionChanged
событие и собирать его во второй список, который вы очищаете каждые 20 секунд