【发布时间】:2016-10-13 15:10:54
【问题描述】:
我正在尝试并行运行两个 exe 程序。我想启动它们,等待它们完成后再继续。这是一个例子:
static void Main(string[] args)
{
ProcessStartInfo proc1Info = new ProcessStartInfo("Testexe.exe");
proc1Info.ErrorDialog = false;
proc1Info.UseShellExecute = false;
proc1Info.RedirectStandardOutput = true;
proc1Info.RedirectStandardError = true;
proc1Info.Arguments = "5000";
ProcessStartInfo proc2Info = new ProcessStartInfo("Testexe1.exe");
proc2Info.ErrorDialog = false;
proc2Info.UseShellExecute = false;
proc2Info.RedirectStandardOutput = true;
proc2Info.RedirectStandardError = true;
proc2Info.Arguments = "10000";
Console.WriteLine("Start Proc 1");
Process proc1 = new Process();
proc1.StartInfo = proc1Info;
var task1 = Task.Factory.StartNew(() => proc1.Start());
Console.WriteLine("Start Proc 2");
Process proc2 = new Process();
proc2.StartInfo = proc2Info;
var task2 = Task.Factory.StartNew(() => proc2.Start());
Console.WriteLine("Wait for tasks");
Task.WaitAll(task1, task2);
Console.WriteLine("Procs complete");
}
第一个 proc 将休眠 5 秒,第二个 proc 将休眠 10 秒。我希望看到 procs 已启动的两条消息和消息“等待任务”。然后 10 秒后看到“Procs 完成”。但是,我立即看到“过程完成”。
任务管理器显示正在运行的过程,同时显示“过程完成”。
那么,我如何从一个程序启动两个独立的可执行程序,并行运行它们,然后等待它们完成后再继续?
【问题讨论】:
-
找到了解决方案。使用“proc1.WatForExit()”和“proc2.WaitForExit()”。
标签: c#-4.0 parallel-processing