2011-02-07 3 views
3

У меня есть элемент управления сеткой, который пытается отображать большие объемы данных, поэтому для отображения в потоке пользовательского интерфейса требуется много времени.Silverlight UI Thread Freezing

Я добавил панель загрузки, которая анимируется и отображается в зависимости от того, занят или нет экран (это рендеринг).

Однако загрузочная панель просто замерзает, когда сетка пытается визуализировать. Я предполагаю, что это происходит потому, что есть только один поток пользовательского интерфейса и этот поток занят.

Кто-нибудь знает, как я могу поддерживать загрузочный бар?

Большое спасибо,

Matt

ответ

0

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

http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx

+0

Данные уже получены по отдельной теме. Это не тот бит, который занимает время, это фактический физический рендеринг этих данных. –

0

Если вы настаиваете на сетке, оказывающую все данные сразу, то все зависит от того кода рендеринга сетки может «выход» или нет, вроде старых Windows Forms «DoEvents()» метод. Похоже, что он реализован таким образом, что на самом деле он не возвращает обработку потока пользовательского интерфейса во время его рендеринга, и поэтому ваш индикатор прогресса никогда не обновляется.

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

Вы изучили виртуализацию содержимого сетки? Вы можете получить виртуализацию пользовательского интерфейса в принципе бесплатно, если вы обернете FrameworkElements, которые вам нужно отобразить в VirtualizingStackPanel. Если вам нужна еще более сложная задача, вы также можете получить виртуализацию данных, обернув свой набор данных классом PagedCollectionView, а затем напишите. См. here для получения более подробной информации. См. Также here для другого (более простого?) Способа реализации такой же виртуализации.

+0

Я сказал сетку, чтобы попытаться упростить проблему абстрактным способом. Мы фактически используем один из сторонних элементов Telerik, поэтому, к сожалению, мы не можем изменить код управления. –

+0

Вам действительно нужно отображать сразу все данные? Или будет работать какая-то схема поиска страниц/виртуализации/ленивого поиска? –