【问题标题】:Run two executables in parallel并行运行两个可执行文件
【发布时间】: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


【解决方案1】:

找到解决方案: 静态无效主要(字符串 [] 参数) { ProcessStartInfo proc1Info = new ProcessStartInfo("Testexe.exe"); proc1Info.ErrorDialog = 假; 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);
}

【讨论】:

    猜你喜欢
    • 2016-08-24
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多