2016-05-31 10 views
0

Also für mein neues Projekt muss ich den Inhalt, der von einer Konsolen-App generiert wurde, in eine WPF-TextBox legen. Der Punkt ist, dass die App die Textdatei (test.txt) erst nach Abschluss des Prozesses erzeugt, was einige Zeit dauern kann.Check For Process.Start Termination

Hier ist der Code für die gleiche:

foreach (var website in lst) //list can have several entries. 
      { 
       var args = "-v -all -text test.txt n" + website.ToString() + " 443"; 
       Process.Start(@"C:\TestSSLServer.exe", args); 

       Task.Factory.StartNew(() => 
       { 
        MyValue = System.IO.File.ReadAllText(@"C:\test.txt"); 

       }); 
      } 

Wie stelle ich sicher, dass das Textfeld nur, wenn die Konsole app TestSSLServer quitt bevölkert ist?

Bearbeiten:Process.WaitForExit(); funktioniert nicht. Ich versuchte es :(Dennoch wirft nicht gefunden Ausnahme-Datei.

Dank.

Antwort

0

Sie Process.WaitForExit() verwenden können, bis der Prozess beendet zu blockieren.

Process p = Process.Start(@"C:\TestSSLServer.exe", args); 
p.WaitForExit(); 

Ich stelle fest, würde, dass diese blockiert, was Thread es ist laufen. Wenn Sie benachrichtigt, wenn der Prozess sein wollen stattdessen Exits verwenden, um das Process.Exited Ereignis.

+0

Funktioniert nicht. Ich bekomme immer noch die Datei nicht gefunden Ausnahme. –

+0

Nun, existiert die Datei? Sie haben nichts über eine 'FileNotFoundException' erwähnt. Es sieht auch so aus, als würden Sie die gleiche Datei in der Schleife überschreiben - sollten Sie synchron aus der Textdatei lesen anstatt einen Thread zu erzeugen? –

+0

Überschreiben ist der Punkt. Ich möchte die Datei lesen und sie an das Textfeld anhängen. Ich bin wirklich nicht sehr erfahren mit Threads, also habe ich dort vielleicht geschraubt. –

0

Sie müssen den Prozess in einer variablen vom Typ Prozess speichern. Dazu kann sein EnableRaisingEvents-Flag auf true setzen und das Ereignis signalisieren, dass der Prozess beendet wurde. Ihr Handler sollte die Funktion sein, die das Textfeld ausfüllt.

Beispielcode ist auf MSDN verfügbar. https://msdn.microsoft.com/en-us/library/system.diagnostics.process.exited(v=vs.110).aspx

+0

Nach Ihrer Bearbeitung zu urteilen, haben Sie ein kleines XY-Problem ... Sie haben nicht deutlich gemacht, dass Sie eine 'FileNotFoundException' bekommen. Also ist der Prozess, den Sie gerade erstellen die Datei tatsächlich erstellen? Ihre Liste von Argumenten, insbesondere das Argument, das nur ein einfaches "n" ist, sieht verdächtig aus. – tanikaze