31

我正在尝试通过命令行执行一个命令,然后执行另一个命令(不在 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");
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 回答
6

更短:

Process.Start("cmd.exe", @"/k java -jar myJava.jar").WaitForExit();

这是有效的,因为静态方法Process.Start返回一个Process对象。然后您可以直接在其上调用该WaitForExit方法,甚至无需将其存储在局部变量中。

于 2018-04-25T10:31:11.833 回答
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 回答