Sher Shah 1 Ответов: 1

Запуск следующей строки кода после завершения процесса


- Привет !!
я новичок в программировании и пишу код в visual studio с использованием c#.
Я запускаю там процесс (в основном дважды щелкаю файл, который внутренне запускается и выдает нам вывод в виде текстового файла).
В следующей строке я написал код для получения этого текстового файла, созданного в результате процесса.
Проблема в том, что процесс запуска и выдачи текстового файла в качестве выходного занимает несколько секунд и означает, что в то время как следующий файл, который получает текстовый файл, говорит null. Потому что создание текстового файла занимает несколько секунд. Есть ли какой-нибудь метод, которым я могу поставить перерыв или что-то еще, чтобы, когда process.run будет завершен, должна была запуститься следующая строка кода.

Что я уже пробовал:

Process.Start(@"D:\example.gms");
List<string> lines = File.ReadAllLines(@"D:\My.txt").ToList();

1 Ответов

Рейтинг:
6

OriginalGriff

Процессы являются независимыми потоками, и они не выполняются в том же "пространстве", что и код, который "запускает их" - поэтому почти сразу вы вызываете Process.Начните, следующая строка кода, вероятно, будет выполнена.

Вы можете предотвратить это, дождавшись завершения процесса, который вы начинаете:

Process process = Process.Start(@"D:\example.gms");
process.WaitForExit();
List<string> lines = File.ReadAllLines(@"D:\My.txt").ToList();
Но .. это предотвратит выполнение потоком, запустившим новый процесс, каких - либо действий до тех пор, пока новый процесс не завершится, а это означает, что если вы вызовете этот процесс в потоке пользовательского интерфейса (тот, который запускает ваше приложение), то ваше приложение остановится и вообще не будет реагировать на ввод данных пользователем во время выполнения нового процесса . Если это займет некоторое время, ваш пользователь может разочароваться, поэтому вам нужно будет быть осторожным (или кодировать намного больше, чтобы обойти это, переместив код запуска и ожидания процесса в поток BackgroundWorker).