Как я могу проверить, был ли изменен список ?

#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 секунд