Мне нужно запустить несколько экземпляров внешнего исполняемого файла из моего приложения.Среднее время выполнения этого исполняемого файла составляет около 3 минут.Я хочу перенаправить вывод этих процессов и обновить индикатор выполнения в моем графическом интерфейсе.Конечно, я не хочу ждать, пока они вернутся, прежде чем я смогу продолжать использовать мое приложение.
Я думаю, что я должен создать поток для каждого экземпляра и обновить индикатор выполнения, когда поток завершится.
Это правильный подход?
Кроме того, вы рекомендуете хороший ресурс / документацию, чтобы понять, как он работает?Я нашел только http://www.dotnetperls.com/threadpool.
edit: эти процессы основаны на сети, т. Е. Время выполнения может сильно различаться в зависимости от задержки / пропускной способности канала.
Что касается индикатора выполнения, я бы хотел обновлять его каждый раз, когда завершается процесс.Есть ли обработчик для этого?Позже я добавлю более подробное обновление, основанное на выводе процессов для увеличения прогресса, проделанного на каждом шаге выполнения.
edit 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
}
Это правильно или есть более элегантный способдля достижения этой цели ?Я не хочу, чтобы мое приложение было заблокировано во время выполнения, конечно.Для этого лучше использовать фоновых работников?