Windows зависает при попытке использовать многопоточность для заполнения большого набора данных в поле со списком? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь заполнить список из примерно 3000 слов в выпадающем меню выпадающего списка.Это заняло много времени в одном цикле итерации, поэтому я решил использовать многопоточность, чтобы поток выполнял ту же работу для трети списка.Он работает быстрее, но я заметил, что он сильно зависает при работе потоков.Я не уверен, является ли это проблемой с блокировкой или это просто занимает много времени, чтобы заполнить список элементов в выпадающем списке.

Я пытался использовать методы, вызывающие методы, но я чувствую, что я использую их неправильно в этом случае.

У меня начались следующие темы:

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;
}

Форма просто зависает, когда я пытаюсь это сделать.

1 Ответ

0 голосов
/ 02 июля 2019

Используйте метод AddRange () :

При использовании этого метода для добавления предметов в коллекцию вам не нужно вызвать методы BeginUpdate и EndUpdate для оптимизации производительности.

Что-то вроде:

PartNumber_Text.Items.AddRange(totalPartNumber.ToArray());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...