gpt4 book ai didi

c# - 如何在不卡住 UI 线程的情况下更改 DataGrid ItemsSource?

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:15 25 4
gpt4 key购买 nike

我有一个客户列表,我更新了我的 DataGridItemsSource 以包含客户列表。
问题是在更改 ItemsSource 后,线程将所有绑定(bind)目标更新为每个客户对象中的值,此操作会卡住 UI 超过 30 秒。
为了解决这个问题,我尝试更改另一个 Thread 中的 ItemsSource 属性,但新线程无法访问 UI 线程拥有的数据网格控件。
如果我将 ItemsSource 更改代码放入 Invoke 方法中,UI 将再次卡住。

//The following code is handled in another thread

// Geting a list of Customers
List<Customer> customers = manager.AllCustomers.SearchCustomers(fName, lName, address, city, tz, phone);

//Changing the DataGrid ItemsSource
Dispatcher.Invoke(() => customersSearchResultsDG.ItemsSource = customers);
//UI Thread is freezing until ItemsSource Changing complete

附上
它认为的时间量并没有真正打扰我,因为我创建了一个加载动画控件..但是卡住使动画卡住,这就是我试图修复的问题。

最佳答案

当 WPF 应用程序中的 UI 线程繁忙时,UI 会出现卡住现象。对此无能为力,但为了避免这种情况,我们通常会在后台线程中尽可能多地执行长时间运行的工作。但是,正如您所发现的,您无法从后台线程操作 UI 元素,因此我们能做的只有这么多。

我们可以做的其他事情来最小化 UI 线程忙碌的时间是使用虚拟化,容器回收,freezing resources和/或优化使用的Template。您可以从 Optimizing Performance: Controls 中找到更多相关信息。 MSDN 上的页面。

但是,由于您的集合中的项目数量很少,在我看来,您加载和/或准备数据的效率极低,或者您的 DataTemplate 非常庞大和复杂定义您的项目。如果您的问题是后者,上面提供的链接应该对您有所帮助。

关于c# - 如何在不卡住 UI 线程的情况下更改 DataGrid ItemsSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27149551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com