Я должен сначала упомянуть, что я новичок в программировании. Я объясню свою проблему и мой вопрос в меру своих возможностей.Столбец прошедшего времени ObjectListView Потенциально необходимо многопоточность
Мне было интересно, если можно обновить один столбец ObjectListView (отсюда ОЛВ). Я хотел бы иметь столбец, который отображает «Истекшее время» каждой строки. Этот столбец прошедшего времени будет обновляться каждые 15-30 секунд.
Как я могу установить OLV
myOLV.SetObjects(GetMyList());
метод GetMyList возвращает список заполняется из простого запроса к базе данных.
В методе GetMyList он преобразует столбец DateTime в строку, показывающую прошедшее время. Затем это показано OLV в виде строки, а не даты и времени ...
elapsed_time = ((TimeSpan)(DateTime.Now - x.time_arrived)).ToString("hh\\:mm\\:ss");
Как я пытался сделать эту работу был с помощью таймера, который будет каждые 30 секунд вспомнить метод GetMyList. Поскольку метод будет повторно запрашивать базу данных и возвращать полученные записи, они были более актуальными. Это работало нормально, пока у меня не было более 20 строк в OLV. Каждое «обновление» для 200 строк занимает 4 секунды. Это составляет 4 секунды, когда пользовательский интерфейс не отвечает ...
Поскольку я новичок в программировании, я никогда ничего не делал с многопоточными работами, но я немного прочитал об этом и попытался создать решение. Даже когда я создаю новый поток, чтобы «обновить» объект OLV, он по-прежнему приводит к тому, что вся форма становится невосприимчивой.
Мой вопрос:, как я могу иметь столбец в моем обновлении ObjectListView каждые 15-30 секунд, не заставляя весь пользовательский интерфейс не реагировать? Возможно ли вообще быть/рекомендуется обновить ObjectListView в фоновом режиме, а затем отобразить его, когда он будет готов?