2013-03-28 21 views
18

コマンドラインでコマンドを実行しようとしていて、前のコマンドの結果に依存する(cmdではなく)別のコマンドを実行しようとしています。 。 問題は、最初のコマンドが終了するまでに約2分かかり、2番目のコマンドは最初のコマンドが終了するまで「待機」しないということです。 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()メソッドを使用することができます。

関連付けられたプロセスが終了するために、プロセスコンポーネントに無期限に待機するように指示します。

// 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();プロセスを使用することがベストです。

コマンドが終了するまでの時間をミリ秒単位で指定するか、アドバイスとして無期限に指定します。

関連する問題