【问题标题】:Multithreading with the WPF DataGrid?使用 WPF DataGrid 进行多线程处理?
【发布时间】:2010-09-24 16:30:22
【问题描述】:
我目前有一个 WPF DataGrid 通过我的程序中的 DataGrid 的 ItemsSource 属性绑定到一个 DataSet。使用我当前的设置,我遇到了导致 GUI 锁定的加载时间问题。是否可以多线程加载 DataGrid,以便在加载行时填充行,而不是加载所有行然后按当前状态填充 DataGrid?
我对多线程的概念非常陌生,因此我们将不胜感激!
【问题讨论】:
标签:
c#
wpf
multithreading
datagrid
rows
【解决方案1】:
问题是访问 UI 控件需要在 UI 线程上,因此对于数据绑定,很难简单地在单独的线程中完成工作,否则相对容易。事实上,这种情况需要一些技巧。
这里有一个很好的例子,它展示了如何使用数据虚拟化来实现这一点:
http://www.codeproject.com/KB/WPF/WpfDataVirtualization.aspx
此解决方案利用了这样一个事实,即当 ItemsControl 绑定到 IList 实现而不是 IEnumerable 实现时,它不会枚举整个列表,而只会访问显示所需的项目。它使用 Count 属性来确定集合的大小,大概是设置滚动范围。然后它将使用列表索引器遍历屏幕上的项目。因此,可以创建一个 IList,它可以报告有大量项目,但仅在需要时才实际检索这些项目。