2016-10-13 14 views
0

2つのexeプログラムを並列実行しようとしています。私はそれらを開始し、それらが完了するのを待ってから続行します。次に例を示します。2つの実行ファイルを並列に実行する

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秒と10秒のための第二PROCをスリープ状態になるだろう。私はprocsが開始した2つのメッセージと "タスクを待つ"というメッセージを見ることを期待していました。その後10秒後に "Procs complete"と表示されます。しかし、すぐに「Procs complete」と表示されます。

タスクマネージャは、Procs completeが表示されている間にprocsが実行されていることを示します。

したがって、1つのプログラムから2つの別々の実行可能プログラムを起動し、並列実行してから、処理を続ける前に完了するのを待つ方法はありますか?溶液実測

+0

解決策が見つかりました。 "proc1.WatForExit()"と "proc2.WaitForExit()"を使用します。 – fldiver

答えて

0

: 静的な無効メイン(文字列[] args){ 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); 
} 
関連する問題