我的WPF程序的故事板动画口吃破坏了用户体验(例如,在ObservableCollection和ListBox中添加更多项目正在更新)。
我的想法是通过以更高的优先级调度动画来使动画更顺畅,所以我尝试了
Storyboard sb = new Storyboard();
//all animations
this.Dispatcher.Invoke(() =>
{ sb.Begin();
}, System.Windows.Threading.DispatcherPriority.Send);
我认为“发送”作为最高优先级和“SystemIdle”之间存在差异,但是没有。
我希望我对调度程序的理解存在小问题,并且有一个简单的解决方法,但我对改进动画性能的任何想法持开放态度。
修改
如果我完全禁用填充列表框,一切运行顺利
列表框的填充方式如下
Task.Factory.StartNew(() =>
{
List<MyData> _f = new List<MyData>();
//populate _f
Dispatcher.BeginInvoke(new Action(() => {
_MyCollection.Clear();
_MyCollection.AddRange(_f); //Adding items without raising events *
}), DispatcherPriority.SystemIdle);
}
*我甚至从ObservableCollection : calling OnCollectionChanged with multiple new items
使用addRange for ObservableCollection