当尝试使用多线程将大型数据设置填充到Combox中时,Windows形成了冻结



我正在尝试将大约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());

相关内容

最新更新