C#将组合框绑定到不断增长的列表

C#将组合框绑定到不断增长的列表,c#,winforms,data-binding,combobox,datasource,C#,Winforms,Data Binding,Combobox,Datasource,WinForms、.NET3.5 我有一个组合框,它需要显示不断增长的项目列表——有一个长时间运行的获取项目的过程,我希望能够在项目随时间累积时向用户显示项目 将DatSource属性设置为原始数组/列表不起作用,因为ComboBox不会注册后续添加 现在,我可以将DatSource设置为BindingList——但这似乎变得非常缓慢。当我看到事情进展顺利时;但我可能每隔几秒钟就要添加1000个项目,而这个比率只是挂起了表格 我完全愿意相信这是直接绑定到BindingList的固有缺点,但我希望

WinForms、.NET3.5

我有一个组合框,它需要显示不断增长的项目列表——有一个长时间运行的获取项目的过程,我希望能够在项目随时间累积时向用户显示项目

将DatSource属性设置为原始数组/列表不起作用,因为ComboBox不会注册后续添加

现在,我可以将DatSource设置为BindingList——但这似乎变得非常缓慢。当我看到事情进展顺利时;但我可能每隔几秒钟就要添加1000个项目,而这个比率只是挂起了表格

我完全愿意相信这是直接绑定到BindingList的固有缺点,但我希望能够更好地了解到底发生了什么。有关DatSource、BindingList和BindingSource的MSDN文章讨论了诸如和BindingContext、CurrencyManager之类的概念,但没有帮助我理解可能导致此速度减慢的特定事件、重绘以及触发的其他内容

我怀疑BindingSource向ComboBox注册了一个item add事件,然后ComboBox会经历一系列的item添加、下拉检查和失效。但MSDN浏览和谷歌搜索并没有帮我回答这个问题

谁能给我指出正确的方向吗


澄清


我知道设计问题,以及解决这个问题的方法。因此,我并不是真的在寻找解决方案——但我确实想了解正在发生的事情的更深层机制。

默认控件不是为此类操作创建的,因为据我所知,所有条目都缓存在控件上


您需要使用一个正确支持“虚拟”模式的控件,这意味着它只加载列表中当前显示的少数项。

您可以尝试在ComboBox.BeginUpdate()和ComboBox.EndUpdate()中包装添加操作,但要获得更多帮助,您可能需要添加批项。另一种选择是不使用数据绑定,只使用ComboBox.Items集合。虽然没有那么花哨,但应该会有帮助。

我也很难用标准控件显示大量数据


我会尽量记住在我的代码上线后在这里发布一个链接,但为了避免这个问题,我在面板上附加了一个滚动条,并使用滚动条的值来计算面板中应该显示哪些数据。

只是出于好奇,一个每几秒钟添加数千个项目的组合框怎么可能对任何用户都有用呢。。。太多的项目是有用的。按类别或其他方式将组合框分解为某种过滤系统。