我在C#应用程序中使用Process.Start()
执行3个exes。我想顺序运行所有这些exes。现在,每个Process.Start()
都以并行方式自行执行。
例如:
Process.Start(exe1ForCopying_A_50_Mb_File);
Process.Start(exe2ForCopying_A_10_Mb_File);
Process.Start(exe3ForCopying_A_20_Mb_File);
我希望我的第二个Process.Start()
仅在第一个Process.Start()
完成复制50 Mb文件后开始执行(这将花费大约1或2分钟)。
有什么建议吗?
感谢。
答案 0 :(得分:10)
我想我自己得到了答案..! :)
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = MyExe;
startInfo.Arguments = ArgumentsForMyExe;
process.StartInfo = startInfo;
process.Start();
process.WaitForExit(); // This is the line which answers my question :)
感谢VAShhh的建议..
答案 1 :(得分:0)
你可以:
RunWorkerCompleted
(然后以相同方式执行第二个过程)答案 2 :(得分:0)
您可以启动后台线程或任务并在循环中同步等待(使用WaitForExit),也可以使用异步方法。
逐个创建Process对象,并将事件处理程序连接到继续下一个Process的Exited事件。使用Process构造函数创建它们,挂钩Exited事件处理程序,然后调用Start;否则,使用静态Process.Start,如果进程在Process.Start返回和附加事件处理程序之间失败,我认为事件处理程序不会被调用,因为它严格已经退出。
概念验证:(不处理Dispose,队列访问不是线程安全的,但如果它真的是串行的话就足够了,等等)
Queue<Process> ProcessesToRun = new Queue<Process>(new []{ new Process("1"), new Process("2"), new Process("3") });
void ProcessExited(object sender, System.EventArgs e) {
GrabNextProcessAndRun();
}
void GrabNextProcessAndRun() {
if (ProcessesToRun.Count > 0) {
Process process = ProcessesToRun.Dequeue();
process.Exited += ProcessExited;
process.Start();
}
}
void TheEntryPoint() {
GrabNextProcessAndRun();
}