设置具有长数据源的组合框

Set combobox with long datasource

情况:如果访问数据库实际上非常快,超过0.3秒,但是在将数据源分配给组合时出现滞后,冻结超过1分钟。

问题:如何设置组合框、非常长的数据源(超过 100,000 个注册表)且不冻结表格。

实际代码:

var q = from c in DataContext.MyTable
select new { Name = c.Name, Id = c.Id };
IQueryable datasource = q;//q.Count()>100,000

this.comboBox1.DisplayMember = "Name";
this.comboBox1.ValueMember = "Id";
this.comboBox1.DataSource = datasource;

技术: 我正在使用 .Net Framework 4.5.51 使用 VS2013

已经尝试过:

A-使用BackgroundWorker 并在DoWork() 方法中设置数据源。 结果:什么都不做,组合没有元素。

B- 使用 BackGroundWorker 并在 RunWorkerCompleted() 方法中设置数据源。 结果:它确实有效但是就像在主线程中调用set一样,然后也冻结了表单。

C- 使用 BeginInvoke() 方法在不同的线程中设置数据源

结果:再次在主线程中完成工作并冻结应用程序

提前致谢。

也许您可以尝试从其父控件集合中删除组合框,填充组合框并将其添加回父级。类似的东西:

        var parent = comboBox.Parent;
        parent.Controls.Remove(comboBox);
        comboBox.DataSource = ds;
        parent.Controls.Add(comboBox);