Рейтинг:
5
Rick York
Лично я серьезно сомневаюсь, что вы могли бы затопить поток графического интерфейса так сильно, что это было бы плохо.
Если вы действительно думаете, что вам это нужно, то я бы поставил сообщения обновления в очередь в FIFO и заставил графический интерфейс выгружать их, когда вы этого хотите. Во всяком случае, это сведет к минимуму блокирование рабочих.
NoviceCoder871987
Элемент управления Listview не реагирует во время загрузки элементов. Как я могу изменить listview, чтобы он реагировал во время загрузки элементов? я думал только об отсрочке. Другого решения для этого я не нашел.
Rick York
Он не может этого сделать, если вы не "выходите на воздух" между загрузочными входами в него. Я думаю, это вопрос, который вы считаете самым важным. Вы можете установить быстрый таймер (1 мс) и загружать одно сообщение за клик, и это будет держать ваше приложение отзывчивым, но это займет больше времени, или вы можете просто загрузить их все как можно быстрее. Если вы загружаете их все сразу, вы можете отключить обновления listview, и это ускорит процесс еще больше.
NoviceCoder871987
Спасибо за ваш ответ. Загрузка элементов выполняется не за один раз, то есть они загружаются не все в одном цикле, а скорее из сообщений, отправленных из рабочих потоков. Влияние этого без какой-либо задержки между опубликованными сообщениями можно заметить в элементе управления listview, так как щелчок правой кнопкой мыши по этому элементу управления listview никогда не показывает меню вверх, только если все элементы загружены. Каждый PostMessage/PostThreadMessage (Worker->GUI) вызовет загрузку одного элемента listview (LVM_INSERTITEM). Да, у вас есть хороший ответ, я предпочитаю отзывчивость больше, чем заботу о том, как быстро их загрузить.
Rick York
Я могу это понять. Невосприимчивый пользовательский интерфейс будет раздражать пользователей. Вы можете сделать период таймера адаптивным, отбросив его по мере заполнения очереди. Например, если у вас есть 20 или более записей, убейте таймер и воссоздайте его на 5 мс или что-то в этом роде, а если у него меньше 20 записей, то установите его на 100 мс. Эти ценности-просто шутки. Вы должны сделать их все параметры конфигурации, чтобы вы могли настроить их, чтобы получить желаемое поведение без перекомпиляции.
NoviceCoder871987
Да, спасибо, Рик. Очень хороший метод адаптивного интервала таймера. Не думал об этом. У тебя очень хорошее воображение. Я приму ваш ответ как решение.