За кулисами .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
}
Это правильно или есть более элегантный способ добиться этого? Я не хочу, чтобы мое приложение было заблокировано во время выполнения, конечно. Для этого лучше использовать фоновых работников?