Основной вопрос: как запустить код в TestingButton_Click для нескольких потоков в фоновом режиме (аналогично BackgroundWorker), чтобы я смог:
1. Получить все исходные данные для методов
2. Отменить тест для всех потоков одновременно
3. Отчет о проделанной работе
4. Извлеките все таблицы результатов в основной поток.
Следующий код находится внутри TestingButton_Click
List<Thread> threads = new List<Thread>();
//Testing for each pair
foreach (InterfaceWithClassName aCompound in Group1)
{
foreach (InterfaceWithClassName bCompound in Group2)
{
InstancePair pair = new InstancePair();
//some code
if (testModeParallel)
{
Thread thr = new Thread(TestPairParallel);
thr.Start(pair);
threads.Add(thr);
}
else
{
Thread thr = new Thread(TestPairSerial);
thr.Start(pair);
threads.Add(thr);
}
}
}
while (true)
{
int i = 0;
foreach (Thread thread in threads)
{
if (thread.IsAlive)
break;
i++;
}
if (i == threads.Count)
break;
Thread.Sleep(1000);
}
pairsResultsDataGrid.ItemsSource = tab.DefaultView
Пользователь может выбрать, какие соединения тестировать, поэтому каждый раз, когда я тестирую разное количество пар.
Я сделал для разных методов TestPairSerial () и TestPairParallel () на всякий случай.
Структура TestPairSerial () имеет значение
do
{
do
{
} while (isSetbCompaundParams);
} while (isSetaCompaundParams);
//filling up results into tables (main window variables) later to be connected to DataGrids
TestPairParallel () реализован с InfinitePartitioner и использует аналогичную структуру только с Parallel.ForEach (new InfinitePartitioner (), ...
Спасибо за вашу помощь.