#parallel-processing #task-parallel-library
#параллельная обработка #задача-параллельная-библиотека
Вопрос:
Представьте, что у меня есть следующие два метода:
void AddEvenNumbers()
{
for(int i=0; i<10000000; i =2)
{
listbox1.items.add(i); 'just coded by hand, did not really test
}
}
void AddOddNumbers()
{
for(int i=1; i<10000000; i =2)
{
listbox1.items.add(i); 'just coded by hand, did not really test
}
}
Я вызываю эти методы (в Windows Forms) синхронно (что отлично работает):
void button_click(...)
{
AddEvenNumbers();
AddOddNumbers();
}
Как я могу использовать TPL (параллельную библиотеку) для достижения того же (не беспокоясь о порядке добавления элементов в список) наилучшим образом в отношении следующего?
- приложение не должно вести себя как «не отвечающее»
- список необходимо обновлять / обновлять (мгновенно) при добавлении элементов (а не при завершении всего процесса).
Я нахожусь в процессе изучения TPL и пытаюсь применить концепции с использованием WinForms (с наименьшим успехом). Я пробовал несколько способов, но безуспешно.
Кроме того, есть ли какие-либо фундаментальные вещи, которые я должен рассмотреть, прежде чем применять TPL к WinForms (просто хотел убедиться, что я ничего не пропустил).
Высоко ценю ваше время на это.
Ответ №1:
Это невозможно.
Вы можете взаимодействовать с пользовательским интерфейсом только в потоке пользовательского интерфейса.
Однако вы можете использовать TPL для создания набора элементов, которые хотите добавить, если для их создания требуется много времени (например, если они поступают из базы данных или веб-сайта)