以下关于帖子的代码工作正常,但我需要能够同时启动多个进程。
因此,为了给出一些背景知识,列表框包含将通过另一个进程运行以创建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
答案 0 :(得分:0)
取决于PDF处理器的工作原理。您可以避免创建线程,但只需通过在每个进程内输入一个文件来启动10个进程。至少在这个阶段不需要多线程。