我正在尝试通过命令行执行命令,然后执行另一个命令(不在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");
答案 0 :(得分:35)
使用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");
答案 1 :(得分:7)
您可以使用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");
答案 2 :(得分:5)
更短:
Process.Start("cmd.exe", @"/k java -jar myJava.jar").WaitForExit();
这是有效的,因为静态方法Process.Start
返回Process
个对象。然后,您可以直接在其上调用WaitForExit
方法,甚至不将其存储在局部变量中。
答案 3 :(得分: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();
}
答案 4 :(得分:0)
使用WaitForExit();
流程最好,就像其他人所说的那样。
根据建议指定命令退出或无限期的时间(以毫秒为单位)。