2016-03-26 3 views
0

ich zwei exe (zwei Konsole-Anwendungen) mit dem Namen first.exe und second.exe, in denen firstsecond exe ​​dreimal aufrufen, indem Sie Process.start() und übergeben verschiedene Argumente.Nach diesen drei Ausführungen beendet, ich möchte eine Methode (nur nach Abschluss drei Methoden) .Wie das zu tun. Dies ist die Art, wie ich bin den Umgang mit den drei Invokes in second.exeWie die Fertigstellung der drei Methoden von Process.Start() in .net (C#) aufgerufen wissen

static void Main(string[] args) 
     { 


      if (args[0] == "TC" && args[1] == "CS") 
      { 
       Processfiles("TCS"); 
      } 
      if (args[0] == "RC" && args[1] == "CS") 
      { 
       Zipfiles("RCS"); 
      } 
      if (args[0] == "CC" && args[1] == "CS") 
      { 
       Leveragefiles("CTS"); 
      } 

      Downloadfiles(); 
} 

Hier meine Frage ist, wie Downloadfiles(); Verfahren nach Abschluss der drei Methoden Processfiles("TCS");,Zipfiles("RCS");,Leveragefiles("CTS"); auszuführen. Hier wird die Zeit bis zur Fertigstellung von drei Methoden variieren zu unterschiedlichen Zeiten

-Code verwendet second.exe zu starten ist

ProcessStartInfo startInfo = new ProcessStartInfo(); 
      startInfo.FileName = System.Configuration.ConfigurationManager.AppSettings["PathExe"]; 
      startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
      if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) 
      { 
       foreach (DataRow dtr in ds.Tables["testG"].Rows) 
       { 
        startInfo.Arguments = dtr["TC_CODE"].ToString() + " " + dtr["CC_CODE"].ToString(); 
        Process.Start(startInfo); 
        // System.Diagnostics.Process.Start(System.Configuration.ConfigurationManager.AppSettings["PathExe"], dtr["VENDOR_CODE"].ToString() + " " + dtr["TECH_CODE"].ToString()); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      mail.SendMail2(System.Configuration.ConfigurationManager.AppSettings["EmailFrom"], System.Configuration.ConfigurationManager.AppSettings["EmailCc"], null, ex.Message, "error", true); 
      log.Error(ex.Message); 
     } 
+0

Können Sie den Code zeigen Sie zu starten verwenden 'second.exe'? –

+0

@BJ Myers, ich habe meine Frage bearbeitet – peter

Antwort

1

Sie Threading Aufgabe für diese verwenden können. den bedingten Operator die Aufgabe verwenden, wie es

ist
using System.Threading.Tasks; 
... 

Task.Factory.StartNew(() => Processfiles("TCS")); 
Task.Factory.StartNew(() => Zipfiles("RCS")); 
Task.Factory.StartNew(() => Leveragefiles("CTS")); 
Task.WaitAll();//to make sure all the task is complete 
Downloadfiles(); 
+0

Aber der Aufruf stammt von process.start(), Sie meinten innerhalb if Schleife? – peter

+1

Ja, verwenden Sie einfach die Diagnose, während Sie es verwenden, um sicherzustellen, dass. –