За кулисами .NET будет использовать ThreadPool - некоторые фоновые работники будут делиться потоками.

ужно запустить несколько экземпляров внешнего исполняемого файла из моего приложения. Среднее время выполнения этого исполняемого файла составляет около 3 минут. Я хочу перенаправить вывод этих процессов и обновить индикатор выполнения в моем графическом интерфейсе. Конечно, я не хочу ждать, пока они вернутся, прежде чем я смогу продолжать использовать свое приложение.

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

Это правильный подход?

Кроме того, вы рекомендуете хороший ресурс / документацию, чтобы понять, как он работает? я обнаружилhttp://www.dotnetperls.com/threadpool только.

редактировать: эти процессы основаны на сети, т. е. время выполнения может сильно различаться в зависимости от задержки / пропускной способности канала.

Что касается индикатора выполнения, я бы хотел обновлять его каждый раз, когда завершается процесс. Есть ли обработчик для этого? Позже я добавлю более подробное обновление, основанное на выводе процессов, чтобы увеличить прогресс, достигнутый на каждом шаге выполнения.

редактировать 2:

Спасибо за ваш вклад. Поскольку мне, возможно, придется запускать много процессов (до 20), и я не хочу насыщать пропускную способность, я буду запускать 5 параллельно максимум. Каждый раз, когда процесс завершается, я увеличиваю счетчик прогресса (для моего индикатора выполнения) и запускаю еще один, пока все они не будут завершены, используя:

Process p = new Process();
p.StartInfo.FileName = pathToApp;
p.EnableRaisingEvents = true;
p.Exited += OnCalibrationProcessExited;
p.Start();

private void OnCalibrationProcessExited(object sender, EventArgs e)
{
  runAnotherOne function
}

Это правильно или есть более элегантный способ добиться этого? Я не хочу, чтобы мое приложение было заблокировано во время выполнения, конечно. Для этого лучше использовать фоновых работников?

Ответы на вопрос(5)

Ваш ответ на вопрос