2013-04-28 2 views
1

Я должен отображать около 10 000 элементов управления wpf, и я не хочу замораживать свое приложение во время этого действия. Можно ли сделать это в другом потоке?Создание элементов управления wpf в фоновом потоке

Я пытался использовать

myStackPanel.Dispatcher.BeginInvoke(
    System.Windows.Threading.DispatcherPriority.SystemIdle, 
    new NextPrimeDelegate(this.AddButton)); 

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

спасибо за помощь Andrew.

+0

Я не думаю, что вы можете создавать элементы управления на разных потоках. Все инициализации элементов WPF должны быть на первичной ленте STA. Но почему вы создаете множество элементов управления? Для такого сценария вы должны использовать некоторую виртуализацию пользовательского интерфейса. – jure

+3

Пожалуйста, уточните, почему вы должны создать 10.000 элементов управления. Думайте, что должна быть какая-то альтернатива этому. Также проверьте эту статью, если она вам полезна: http://blogs.microsoft.co.il/blogs/tomershamam/archive/2009/09/06/ui-virtualization-vs-data-virtualization.aspx –

+0

@MareInfinitus , ссылка выше мертва. –

ответ

4

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

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

Тот факт, что вам нужно создать 10 000 элементов управления, является экстремальным, и вам, вероятно, следует изучить виртуализацию элементов управления.

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