DrKnS,
Вроде бы предлагалось держать cmd запущенным вечно? Откуда тогда "закрыт"?
Stream != Process
p1.StdIn.Status != p1.Status
так понятнее? )
Cmd может находиться в ожидании ввода или быть занят обработкой команды. Если занят - ничего нового обрабатывать не будет. Ввод будет накапливаться в буфере (до какого-то предела). Запустите net view и попрыгайте по клавиатуре.
Ну да , и чо?
Сколько конкретно ждём? Пользователь возжелал исполнить батник. Вы послали его имя в stdin. Допустим, что он запустился. В процессе исполнения батник выводит произвольные объёмы текста с произвольными задержками. Вы это послушно копируете из stdout куда-то. Как вы определите, что уже аллес, батник закончился, пора показывать панели?
Когда p1.StdIn схавал все что ему дали, переварил, и готов хавать еще (статусы у него есть), вот мы и идем к юзеру (показываем панели) чтобы добыть еще хавчика.
И по контрольным символам, которые не видны, но они есть. Прямо как суслик в ДМБ.
Я запустил команду и мне не важно, закончилась она или нет? Оригинально.
По-честноку - реально не важно.
Тебе важно правильно "лишь" интерпретирповать аутпут.
Этот аутпут чаще всего простой как телевизор Рекорд, но бывает и не столь простой, как в интерактивных дос-играх например.
да как-то там детектится что CMD ничем не занят, но на самом деле не приципиально, если нет активности от него,
Например можно и нарисовать панели обратно, пока он тихо копирует особенно большой файл например.
тут есть другая техническая сложность - интерпретировать все местами замысловатые и незадокументированные возможности Windows консоли