我有一个 C# Windows 窗体项目,其中的窗体包含 2 个列表框和一个按钮。
在 FormLoad 上,左侧列表框填充了一个列表(约 1800 个项目),其中包含有关证券的信息(ID 和名称),当用户单击按钮时,所有证券都会从左侧列表框移至右侧。
当我不使用 BindingSources 时,即我直接使用 ListBoxes 的 Items 属性时,移动过程需要几秒钟:
private void button1_Click(object sender, EventArgs e)
{
while (listBox1.Items.Count > 0)
{
Security s = listBox1.Items[0] as Security;
listBox1.Items.Remove(s);
listBox2.Items.Add(s);
}
}
但是,当我使用 BindingSources 时,需要几分钟的时间:
listBox1.DataSource = bindingSource1;
listBox2.DataSource = bindingSource2;
...
private void MainForm_Load(object sender, EventArgs e)
{
ICollection<Security> securities = GetSecurities();
bindingSource1.DataSouce = securities;
}
private void button1_Click(object sender, EventArgs e)
{
while (bindingSource1.Count > 0)
{
bindingSource1.Remove(s);
bindingSource2.Add(s);
}
}
BindingSource-way 花费这么长时间的原因是什么?
有什么办法可以让它更快吗?
您应该取消设置引发列表更改事件 http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.raiselistchangedevents.aspx在对 BindingSource 进行大量更改之前先更改 BindingSource 上的属性,然后在完成后重置。然后你可以使用重置绑定 http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.resetbindings.aspx刷新绑定的控件。
您还应该使用 BeginUpdate/EndUpdate 包装列表框项目上的大量操作,以避免重绘。这可能是造成经济放缓的主要原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)