В итоге я решил эту проблему, заключив взаимодействие с командной строкой в отдельный класс, и вместо того, чтобы поддерживать одно приглашение для всех действий, я запускал другое приглашение для каждого вызова. Затем я использую WaitForExit()
для синхронизации своих потоков.
После каждой команды я пишу команду exit
, чтобы закрыть процесс. Я сканирую выходные данные для вызовов на выход и, когда я нахожу их, использую контекст этой строки, чтобы сохранить рабочее пространство, чтобы запрос следующей команды был сделан из того же рабочего каталога. Мне также пришлось подключить DataRectainedEventHandler, чтобы проанализировать заголовок и завершить вызовы, прежде чем пересылать EventHandlers в winform.
Что меня беспокоит в этом решении, так это то, что если вывод любого выполняемого мной процесса выводит exit
, сканер вывода будет вести себя так, как если бы он нашел исходный выход. Я использовал то же решение, которое использовал sgmoore в своем ответе - я пишу exit [UNIQUE STRING]
в подсказку и сканирую выходные данные, но я уверен, что это далеко не лучшая практика.