2012-04-04 8 views
2

In meiner Anwendung in VB.NET habe ich eine Anwendung gestartet und eine Wartezeit von 20 Sekunden eingeführt. Aber zum Laden der zweiten Anwendung variiert die Zeit. Ist es möglich, eine Do While-Schleife, ähnlich der Struktur zu haben, wie unten dargestellt:Warten auf Prozess

Start the application1 
do { 
    sleep(2seconds) 
}until(Application1 Window is loaded 

Antwort

2

Haben Sie sehen Process.WaitForInputIdle()? Es wartet, bis die Anwendung eine Meldungsschleife für die Benutzerschnittstelle eingegeben hat (erstellt ein Fenster).

Edit: Siehe MSDN Beschreibung zum Thema here

1

Das größte Hindernis SieFormal konfrontiert wird, wie das Kind Prozess kommuniziert, dass es fertig ist. Das Bestimmen, ob das Fenster eines anderen Prozesses geladen ist, ist bestenfalls wackelig. Es ist viel sauberer, wenn Sie auf etwas mehr definitive

  • Erstellen eines bestimmten Registrierungsschlüssel
  • Schreiben eines Wertes auf eine vorbestimmte Datei
  • Windows-Nachrichten

Sobald Sie auf das entscheiden dann entscheiden, es ist ziemlich einfache Schleife

Dim span = TimeSpan.FromSeconds(20) 
Thread.Sleep(span) 
Do While Not IsProcessReady() 
    Thread.Sleep(span) 
Loop 

Wie bereits gesagt, müssen Sie einen Mechani auswählen sm zu kommunizieren "geladen" und das wird Ihre IsProcessReady Funktion

+0

Dies ist unter der Annahme, dass er die Kontrolle über die andere Anwendung hat. In diesem Fall halte ich IPC-Veranstaltungen für einen besseren Weg. Das Schreiben von magischen Schlüsseln in die Registry oder eine Datei ist anfällig für Fehler im Falle eines Anwendungsabsturzes usw. – aKzenT

+1

@aKzenT guter Punkt, fügte ein wenig über die Verwendung von IPC – JaredPar

Verwandte Themen