2016-10-13 64 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); 
}