我有一个应用程序,我必须将一个数据网格绑定在一个标签项中的用户控件上。
这个过程需要一段时间,所以我在一个单独的线程中创建另一个带有加载动画的Tab项目,当我在数据网格中加载数据时,我选择带有动画的标签项,直到加载数据。
问题是动画正在启动,但是当数据网格绑定开始时,动画就会冻结。
this.Dispatcher.Invoke(DispatcherPriority.Normal,
new Action(
delegate()
{
tiLoading.Content = new Controls.Loading.LoadingAnimation();
tiLoading.IsSelected = true;
}
));
//And now I populate the content of the Tab Item with the User Control that contains data grid
connType = choseConnType(); // Here is a dialog witch ask the user somethig and return a value
tiGeneral.Content = new Windows.General(true, connType);
在开始绑定对话框后,LoadingAnimation正在冻结。
答案 0 :(得分:0)
这是可以理解的。如果您有长时间运行的进程,则应使用BackgroundWorker来运行它。
public void ItsGonnaBeLong()
{
this.IsBusy = true;
var worker = new BackgroundWorker();
worker.DoWork += this.MyDoWorkMethod;
worker.RunWorkerCompleted += this.MyDoWorkCompleted;
worker.RunWorkerAsync();
}
private void MyDoWorkCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// executed after work on background thread is completed
this.IsBusy = false;
}
private void MyDoWorkMethod(object sender, DoWorkEventArgs e)
{
// Do something.
}
将动画放在不同的TabItem上是否很好?您是否考虑过使用Extended WPF Toolkit中的BusyIndicator
?您可以使用BusyIndicator简单地包装Control并使用其IsBusy属性来运行它。
<xctk:BusyIndicator IsBusy="True" >
<my:MyUserControl />
</xctk:BusyIndicator>