2010-09-11 2 views
0

Я работаю над приложением, которое использует элемент управления DataGridView. Так как есть много данных, я использую VirtualMode для использования подкачки, но даже с этой функцией требуется некоторое время для обновления DataGridView. Поэтому я создал элемент управления, который вращает и развлекает пользователя. К сожалению, есть некоторые проблемы с этим решением, а именно, когда управление развлечениями вращается, поток UI обрабатывает любые запросы от него, потому что он настолько занят этим DataGridView.DataGridView блокирует пользовательский интерфейс

Что мне делать для доступа к пользовательскому интерфейсу, даже если он занят? Как сделать, чтобы «развлекать» пользователя при использовании DataGridView или существует ли какой-либо основной способ предотвращения блокировки потока пользовательского интерфейса DataGridView?

btw. Я знаю, что Application.DoEvents, вероятно, может помочь, но я предпочитаю не использовать его.

ответ

0

Отбросьте приоритет потока DataGridView относительно пользовательского интерфейса один или просто запустите случайный Thread.Sleep в функции загрузки данных DGV.

В сочетании с небольшой настройкой размеров страниц, которые должны сортировать его.

+0

Привет, спасибо за ответ, не могли бы вы объяснить, что вы имеете в виду: «Отбросьте приоритет потока DataGridView относительно пользовательского интерфейса», как я могу достичь этого эффекта? – Jarek

0

Я не уверен, как выглядит ваша реализация, поэтому, простите меня, если вы уже знаете это: установка свойства VirtualMode в значение «true» не приводит к тому, что DataGridView автоматически заполняется с помощью загрузки по принципу «точно в момент времени». Скорее, это просто дает вам, как разработчику, возможность сделать это. Если вы используете виртуальный режим, но все же заселяете всю вещь сразу, то вы действительно ничего не набираете. Вместо этого вам придется реализовать свой собственный алгоритм подкачки. Это на самом деле довольно легко сделать. Пожалуйста, взгляните на это MSDN topic. Надеюсь, это поможет!

+0

Привет, Кевин, спасибо за ответ. Я не указал это в главном сообщении, но на самом деле я ссылался на эту страницу MSDN. Итак, я представил кэш, и я установил свойство RowCount для небольших фрагментов данных. Это помогло, но форма, содержащая элемент управления DataGridView, все еще блокируется или блокируется. Это связано с тем, что управление DGV буквально заняло Main/UI Thread в 100% процентах. С наилучшими пожеланиями, Jarek – Jarek

+0

Привет, Jarek, можно ли разместить фрагмент кода? Я использую DGV для отображения больших объемов данных в виртуальном режиме без проблем. В то время как у DGV есть некоторые другие ошибки, я не уверен, как он мог бы полностью связать поток пользовательского интерфейса, если бы не было каких-либо серьезных привязок данных, которые не были приостановлены. –

Смежные вопросы