31

コマンドライン経由でコマンドを実行し、その後、前のコマンドの結果に依存する別のコマンド (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");
4

5 に答える 5

47

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");
于 2013-03-28T07:04:59.350 に答える
8

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");
于 2013-03-28T07:06:16.800 に答える
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();
}
于 2013-03-28T07:08:35.697 に答える
0

WaitForExit();他の人が述べているように、プロセスを使用するのが最善です。

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

于 2013-03-28T08:59:02.407 に答える