运行多个进程

时间:2015-05-13 13:04:57

标签: vb.net process parallel-processing multiprocessing

以下关于帖子的代码工作正常,但我需要能够同时启动多个进程。

因此,为了给出一些背景知识,列表框包含将通过另一个进程运行以创建PDF文件的文件(实质上是将参数传递给另一个进程,即StartInfo.Filename中列出的exe)。目前正在发生什么,比如列表框包含10个文件。在处理其他文件之前,将单独处理每个文件。我希望能够同时启动所有10个文件,而不是等待。有些文件可能比其他文件花费的时间更长,所以我在浪费时间等待每个文件完成。

建议?

            Dim UPSFiles = (From i In ListBoxUPSFiles.Items).ToArray()
        For Each Item In UPSFiles
            Dim UPSFiles2 = Item.ToString
            Using psinfo As New Process
                psinfo.StartInfo.FileName = "\\dgrvdp1\ClientServices\APPS\Printtrack\HeliosPNetExecuter\HeliosPNetExecuter.exe "
                psinfo.StartInfo.Arguments = Arg2 + Arg3 + Arg4 + (Chr(34) + DATA_PATH + "\" + UPSFiles2 + Chr(34) + " ") + Arg6 + Arg7 + Arg8 + Arg9a + Arg10 + Arg11 + Arg13
                psinfo.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
                psinfo.Start()
                'psinfo.WaitForExit()
            End Using
        Next

修改 这是我当前的代码,基于Parallel.ForEach建议。它似乎有点工作但提交了我需要运行的文件数量的10倍。在我的情况下,我有两个文件要处理,但就像我提到的代码产生了10倍我真正需要的进程数。

            Dim SequentialFiles = (From i In ListBoxSequentialFiles.Items).ToString
        For Each Item In SequentialFiles
            Dim SequentialFiles2 = Item.ToString

            Parallel.ForEach(SequentialFiles2, Sub(processFiles)

                                                   Using psinfo As New Process
                                                       psinfo.StartInfo.FileName = "\\dgrvdp1\ClientServices\APPS\Printtrack\HeliosPNetExecuter\HeliosPNetExecuter.exe "
                                                       psinfo.StartInfo.Arguments = Arg2 + Arg3 + Arg4 + (Chr(34) + DATA_PATH + "\" + SequentialFiles2 + Chr(34) + " ") + Arg6 + Arg7 + Arg8 + Arg9c + Arg10 + Arg11 + Arg12
                                                       psinfo.StartInfo.WindowStyle = ProcessWindowStyle.Normal
                                                       psinfo.Start()
                                                       psinfo.WaitForExit()
                                                   End Using

                                               End Sub)

        Next

1 个答案:

答案 0 :(得分:0)

取决于PDF处理器的工作原理。您可以避免创建线程,但只需通过在每个进程内输入一个文件来启动10个进程。至少在这个阶段不需要多线程。