2013-03-28 2 views
18

Я пытаюсь выполнить команду через командную строку, а затем выполнить другую команду (не в 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"); 

ответ

27

Используйте 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"); 
6

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

Примечание:

  1. WaitForExit(int milliseconds) ждать указанное количество миллисекунд для связанного процесса для выхода.
  2. 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"); 
2

Вы можете использовать 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(); 
} 
0

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

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

Смежные вопросы