Отображение индикатора занятости во время ожидания инициализации пользовательского элемента управления

Моему приложению необходимо загрузить пользовательский элемент управления в MainWindow при запуске. Однако инициализация пользовательского элемента управления выполняется медленно. (не из-за загрузки бизнес-данных, я уже отделяю пользовательский интерфейс от бизнес-уровня)

Что я хочу сделать, так это дождаться инициализации пользовательского элемента управления, появится индикатор занятости и исчезнет, ​​когда инициализация пользовательского элемента управления будет завершена.

Right now I have a IsBusy property in the MainViewModel and is databind to the busyindicator in the MainWindow.

The child usercontrol is displayed via a contentcontrol.

presenter.Content = new ChildUserControl(); 
//presenter is the contentcontrol in MainWindow

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

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

Любые идеи по этому поводу?


person user2127480    schedule 14.05.2013    source источник


Ответы (2)


Я реализовал это сам. А именно, у меня был сценарий, когда у нас была загрузка документа XPS (это было очень медленно), а затем мне пришлось реализовать счетчик ("индикатор занятости"). Но это не сработало, потому что они были в одном потоке.

Теперь Дуэйн придумал хитрый способ, как сделать это многопоточным, и это сработало. http://blogs.msdn.com/b/dwayneneed/archive/2007/04/26/multithreaded-ui-hostvisual.aspx

person Erti-Chris Eelmaa    schedule 15.05.2013
comment
Ницца! Это идеально подходит для моей цели! - person user2127480; 15.05.2013

Как насчет отображения анимированного курсора загрузки? Windows уже обрабатывает многопоточность на мыши. У меня была эта проблема раньше, и я реализовал свою собственную анимацию загрузки в другом потоке, но у меня были проблемы с приоритетами рендеринга, из-за чего основной исполняемый код замедлялся, если только курсор мыши не перемещался поверх диалогового окна прогресса. https://stackoverflow.com/a/307020/2247427

person Le-roy Staines    schedule 14.05.2013