c # обновлять большие данные после каждой секунды - PullRequest
0 голосов
/ 21 января 2010

Я столкнулся с проблемой.

У меня есть список, который находится в подробном виде ..

имеет большое количество данных для отображения. и данные постоянно обновляются после каждой секунды.

в представлении списка текущей ситуации мигает. как я могу решить эту проблему

Ответы [ 4 ]

2 голосов
/ 21 января 2010

Вместо того, чтобы просто обновить страницу, чтобы добавить новый контент, возможно, вы могли бы использовать jquery и JSON?

Так что используйте jquery для отправки запроса дополнительной информации каждые X секунд, вызывающих страницу Ashx. Страница ashx получает данные из вашей базы данных и затем возвращает, вы должны вернуть значения результата в виде json, чтобы jquery мог легко проанализировать результат и отобразить на экране.

Отличное руководство по выполнению подобных задач с использованием jquery, c # и веб-сервисов:

Encosia - использование jquery для использования aspnet

jQuery JSON документация

Надеюсь, это поможет вам.

РЕДАКТИРОВАТЬ: Мой ответ предполагал, что вы использовали веб-формы asp.net. Я никогда не использовал выигрышные формы (кроме моих старых vb 6 дней), поэтому не уверен, что вы можете работать с jquery или нет.

1 голос
/ 21 января 2010

В WinForms, чтобы предотвратить этот эффект мерцания, вам нужно использовать объект BackgroundWorker для запуска вашего процесса в отдельном потоке. Затем, после приемлемого интервала, используйте ReportProgress BackgroundWorker's для надлежащего обновления списка.

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx http://www.dotneat.net/2009/02/10/BackgroundworkerExample.aspx http://dotnetperls.com/backgroundworker

Это позволит вам регулярно вызывать метод Refresh () списка, не вызывая мерцания, поскольку процессы будут в разных потоках.

0 голосов
/ 22 января 2010

Используйте FastObjectListView из проекта ObjectListView - обертку вокруг элемента управления .NET WinForms ListView. Быстрая версия - это виртуальный список, который использует двойную буферизацию для обновления без мерцания.

Я использовал его для просмотра списков с более чем 50 000 объектов, а время обновления составляет менее 0,5 секунды (на ноутбуке среднего класса).

НО даже с почти мгновенными обновлениями ваши пользователи будут испытывать трудности с использованием элемента управления, который изменяет его содержимое каждую секунду.

0 голосов
/ 21 января 2010

Часть мерцания в приложении WinForms может быть решена путем двойной буферизации формы и / или элементов управления внутри нее. См. Также: Графика для предотвращения мерцания с использованием двойной буферизации

SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);

Либо посмотрите в свойство Control.DoubleBuffered :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...