【问题标题】:Execute multiple Process.Start() sequentially in C#在 C# 中按顺序执行多个 Process.Start()
【发布时间】:2011-09-09 05:20:50
【问题描述】:

我在我的 C# 应用程序中使用 Process.Start() 执行 3 个 exe。我想按顺序运行所有这些 exe。现在,每个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 分钟)后开始执行。

有什么建议吗?

谢谢。

【问题讨论】:

    标签: c# .net process.start


    【解决方案1】:

    你可以:

    【讨论】:

    • 我想我自己得到了答案..! :) 流程流程 = 新流程(); ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = MyExe; startInfo.Arguments = ArgumentsForMyExe;进程.StartInfo = startInfo;进程.开始();进程.WaitForExit(); // 这是回答我问题的那一行 :) 感谢您的建议 VAShhh..
    • 如果我理解这一点,您编写的代码会使程序“阻塞”或“等待”并行进程的结束。您确定这不会导致界面冻结吗?使用事件不会这样做
    【解决方案2】:

    您可以启动后台线程或任务并在循环中同步等待(使用 WaitForExit),也可以使用异步方法。

    逐个创建 Process 对象并将事件处理程序连接到 Exited 事件,该事件将继续执行下一个 Process。使用 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();
    }
    

    【讨论】:

      【解决方案3】:

      我想我自己得到了答案..! :)

      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..

      【讨论】:

        猜你喜欢
        • 2013-07-11
        • 2011-03-02
        • 2010-10-24
        • 1970-01-01
        • 1970-01-01
        • 2012-11-23
        • 2010-11-23
        • 2017-11-22
        • 1970-01-01
        相关资源
        最近更新 更多