Подтвердить что ты не робот

Как выполнить команду через командную строку и дождаться ее выполнения

Я пытаюсь выполнить команду через командную строку, а затем выполнить другую команду (не в cmd), которая зависит от результата предыдущей команды. Проблема в том, что первая команда занимает около 2 минут до конца, а вторая команда не будет "ждать" для завершения первого. Как заставить вторую команду ждать, пока не закончится первый?

Спасибо заранее!

public void runCmd(){
  String command = @"/k java -jar myJava.jar";
  ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe");
  cmdsi.Arguments = command;
  Process cmd = Process.Start(cmdsi);
}
.
.
.
runCmd();           //first command, takes 2 minutes to finish
MessageBox.Show("This Should popup only when runCmd() finishes");
4b9b3361

Ответ 1

Используйте метод Process.WaitForExit:

 public void runCmd()
 {
    String command = @"/k java -jar myJava.jar";
    ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe");
    cmdsi.Arguments = command;
    Process cmd = Process.Start(cmdsi);
    cmd.WaitForExit();    
 }
.
.
.
 runCmd();        
 MessageBox.Show("This Should popup only when runCmd() finishes");

Ответ 2

Вы можете использовать WaitForExit().

Примечание:

  • WaitForExit(int milliseconds), чтобы подождать указанное количество миллисекунд для завершения процесса.
  • WaitForExit() ждать неограниченное время для завершения связанного процесса.
public void runCmd()
{
  String command = @"/k java -jar myJava.jar";
  ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe");
  cmdsi.Arguments = command;
  Process cmd = Process.Start(cmdsi);
  cmd.WaitForExit(); //wait indefinitely for the associated process to exit.
}
.
.
.
runCmd();           //first command, takes 2 minutes to finish
MessageBox.Show("This Should popup only when runCmd() finishes");

Ответ 3

Вы можете использовать метод Process.WaitForExit();

Поручает компоненту Process ждать бесконечно связанный процесс для выхода.

// Start the process with the info you specified.
// Call WaitForExit and then the using statement will close.
using(Process cmd = Process.Start(cmdsi))
{
      cmd.WaitForExit();
}

Ответ 4

Использование процесса WaitForExit(); было бы лучшим, как заявили другие.

указание времени в миллисекундах для команды для выхода или неопределенности в соответствии с рекомендациями.