我在正在编写的 WinForm 应用程序中填充我的组合框时遇到问题。我用来填充这些组合框的数据是从数据库中提取的。问题是comboBoxes需要绑定的数据很多,所以这个过程需要很长的时间,整个应用程序被锁定(整个绑定数据的过程需要9秒多,而从数据库中提取数据仅需 400 毫秒)。我试图通过拆分创建控件(主线程)和填充组合框(后台工作者)的过程来加快速度,但我自然会得到跨线程错误。这是我使用的代码部分:
private void Populate()
{
comboBox1.BindingContext = new System.Windows.Forms.BindingContext();
comboBox1.DataSource = MyClass.dtMyDataTable;
comboBox1.DisplayMember = "TitleColumn";
.//I repeat the same code for each comboBox
.//I use the BiningContext because some of the comboBoxes have to display the
.//same data.
}
我创建了一个类,其中包含我在此表单中需要的所有 DataTables - 有多个表单使用数据库中的相同数据,因此我创建了一个类并创建了一个对象来填充父 Form.Load 上的所有这些 DataTables( ),然后在创建它们时将它们传递给子窗体。这样我在应用程序加载时加载数据(它甚至不需要那么长时间),所以当我从子表单调用它时它应该可以使用。我试图Populate()
从backgroundWorker.DoWork()
方法中调用该方法,但我得到了跨线程错误。
我的问题是 - 有没有办法让这项工作,如果没有,我可以用什么作为替代解决方案。
谢谢