我有一个客户列表,我更新了DataGrid
的{{1}}以包含客户列表。
问题是在更改ItemsSource
之后,线程将所有绑定目标更新为每个客户对象中的值,此操作会冻结UI超过30秒。
为了解决这个问题,我尝试更改另一个ItemsSource
中的ItemsSource
属性,但新线程无法访问UI线程拥有的数据网格控件。
如果我将Thread
更改代码放在ItemsSource
方法中,则UI将再次冻结。
Invoke
P.S
它认为没有真正打扰我的时间因为我创建了一个加载动画控件..但是冻结让动画卡住了,这就是我想要解决的问题。
答案 0 :(得分:1)
当WPF应用程序中的UI线程忙时,UI将显示为冻结。没有什么可以做的,但为了避免这种情况,我们通常在后台线程中尽可能多地进行长时间的工作。但是,正如您所发现的那样,您无法从后台线程中操纵UI元素,因此我们可以做很多事情。
我们可以采取的其他措施是尽量减少UI线程繁忙的时间,使用虚拟化,容器回收,freezing resources和/或优化使用过的Template
。您可以在MSDN上的Optimizing Performance: Controls页面上找到有关此内容的更多信息。
但是,由于您的收藏中的项目数量很少,我认为您加载和/或准备数据的效率非常低,或者您有非常大且复杂的DataTemplate
来定义您的项目。如果你的问题是后者,上面提供的链接可以帮助你。