我正在尝试将大约3000个单词的列表填充到Windows form combobox下拉菜单中。它花了很长时间在一个迭代循环中进行,因此我决定使用多线程使线程在列表的三分之一上进行相同的工作。它运行速度更快,但是我注意到线程运行时会冻结很多。我不确定这是锁定的问题,还是需要很长时间才能填充Combobox项目列表。
ive尝试使用方法调用器,但是在这种情况下,我觉得我想使用它们错误。
我已经开始这些线程:
Thread threadmid = new Thread(splitMidThird);
Thread threadtop = new Thread(splitTopThird);
threadmid.Start();
threadtop.Start();
private void splitMidThird()
{
int thirds = totalPartNumber.Count() / 3;
if (PartNumber_Text.InvokeRequired)
{
PartNumber_Text.BeginInvoke(new MethodInvoker(delegate
{
for (int index = thirds; index <= thirds * 2; index++)
{
PartNumber_Text.Items.Add(totalPartNumber.ElementAt(index));
}
}));
}
return;
}
private void splitTopThird()
{
int thirds = totalPartNumber.Count() / 3;
if (PartNumber_Text.InvokeRequired)
{
PartNumber_Text.BeginInvoke(new MethodInvoker(delegate
{
for (int index = thirds * 2; index <= totalPartNumber.Count() - 1; index++I)
{
PartNumber_Text.Items.Add(totalPartNumber.ElementAt(index));
}
}));
}
return;
}
当我尝试这个时,形式只是冻结。
使用addrange((方法:
使用此方法将项目添加到集合中时,您不需要 调用beginupdate和enduptate方法以优化性能。
类似:
PartNumber_Text.Items.AddRange(totalPartNumber.ToArray());