Вы можете установить максимальное количество потоков в ThreadPool равным 4:
ThreadPool.SetMaxThreads(4, 4);
Затем вы можете поставить в очередь 1000 процессов в ThreadPool:
for (int i = 0; i < 1000; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(LaunchProcess));
}
Вотметод, который будет работать в фоновом потоке и запустить ваш процесс.Он использует WaitForExit (), чтобы обеспечить завершение процесса до завершения потока.
static void LaunchProcess(object o)
{
var p = new Process();
p.StartInfo = new ProcessStartInfo("myprocess.exe");
p.Start();
p.WaitForExit(); // Critical to wait here for the process to finish
}
Это должно ограничить число активных процессов до 4, я полагаю.Не проверял.