在等待用户控件的初始化时显示忙指示符

时间:2013-05-14 22:48:39

标签: wpf multithreading user-controls initialization indicator

我的应用需要在启动时在MainWindow中加载usercontrol。 但是,用户控件的初始化很慢。 (不是因为加载业务数据,我已经将UI与业务层分开了)

我想要做的是在等待用户控件的初始化时,将出现忙指示符,并在用户控件的初始化完成时消失。

现在我在MainViewModel中有一个IsBusy属性,并且是MainWindow中busyindicator的数据绑定。

通过contentcontrol显示子usercontrol。

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

但是,如何同时运行busy指示器的初始化和显示?我似乎需要不同的线程来处理这个问题。

但是,在让主UI线程显示忙指示符的同时在不同线程上运行初始化将不起作用,因为另一个线程中的子控件不能放在其父控件中,在这种情况下是MainWindow。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我自己实施了它。即我有我们有XPS文件加载的场景(它真的很慢)然后我必须实现微调器(“忙指示器”)。但这不起作用,因为他们在同一个线程上。

现在Dwayne想出了如何多线程这个聪明的方法,并且它有效。 http://blogs.msdn.com/b/dwayneneed/archive/2007/04/26/multithreaded-ui-hostvisual.aspx

答案 1 :(得分:0)

显示动画加载光标怎么样? Windows已经处理了鼠标上的线程。我以前遇到过这个问题,并且我在另一个线程上实现了自己的加载动画但是我在渲染优先级方面遇到了问题,导致主执行代码变慢,除非鼠标光标移动到进度对话框的顶部。 https://stackoverflow.com/a/307020/2247427