2016-10-13 60 views
0

我试图并行运行两个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"); 
} 

第一个过程将睡5秒,第二个过程10秒。我期望看到p​​rocs已经开始的两条消息和“等待任务”的消息。然后10秒后看到“Procs complete”。但是,我立即看到“Procs完成”。

任务管理器显示在“Procs complete”显示时运行的procs。

那么,如何从单个程序启动两个单独的可执行程序,并行运行并等待它们完成后再继续?

+0

找到解决方案。使用“proc1.WatForExit()”和“proc2.WaitForExit()”。 – fldiver

回答

0

找到了解决方案: 静态无效的主要(字符串[]参数) { 的ProcessStartInfo proc1Info =新的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; 
    proc1.Start(); 

    Console.WriteLine("Start Proc 2"); 
    Process proc2 = new Process(); 
    proc2.StartInfo = proc2Info; 
    proc2.Start(); 

    Console.WriteLine("Wait for Procs"); 
    Stopwatch sw = new Stopwatch(); 
    sw.Start(); 
    proc1.WaitForExit(); 
    proc2.WaitForExit(); 
    sw.Stop(); 
    Console.WriteLine("Procs complete in '{0}' ms", sw.ElapsedMilliseconds); 
}