在C#中按顺序执行多个Process.Start()

时间:2011-06-06 11:17:10

标签: c# .net process.start

我在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分钟)。

有什么建议吗?

感谢。

3 个答案:

答案 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)

你可以:

答案 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();
}