Wednesday 22 November 2017

C # Prozess Klasse Waitforexit


Im Moment arbeite ich an einer Console Runner-Anwendung, die den folgenden Code, um das Protokoll auszugeben und zu warten, bis der Prozess abgeschlossen ist: Ich habe zwei Fragen zu diesem Stück Code. Ich bemerkte, dass, wenn der Vorgang dauert länger als 30 Sekunden, der Aufruf p. ExitCode bombt. Was passiert, wenn mein Prozess dauert nur 1 Sekunde, wird es 30 Sekunden warten ohnehin oder der Prozess wird von der CLR am 5. Februar beraten werden, um 12:40 Sie verstecken diese Geheimnisse in der Dokumentation: "Wenn Sie versuchen, die ExitCode vor der Prozess beendet ist, wirft der Versuch eine Ausnahme. Überprüfen Sie zunächst die HasExited-Eigenschaft, um zu überprüfen, ob der zugeordnete Prozess beendet wurde. Quot und quotWaitForExit. Und blockiert den aktuellen Thread der Ausführung, bis die Zeit verstrichen ist oder der Prozess hat verlassen ndash Alex K. Ich fand es auch, aber ich war nicht sicher, dass ich es richtig gelesen. So scheint es, dass, wenn der Prozess-Ausgang vor dem Zeitstempel in der WaitForExit gibt es keine Probleme, aber umgekehrt eine schöne Ausnahme. Danke ndash Raffaeu Feb 5 14 um 12: 49Lets lesen, was MSDN darüber sagt: Die WaitForExit () () () overload wird verwendet, um den aktuellen Thread zu warten, bis der damit verbundene Prozess beendet wird. Diese Methode weist die Prozesskomponente an, eine unbegrenzte Zeitspanne zu warten, bis der Prozess beendet wird. Dies kann dazu führen, dass eine Anwendung nicht mehr reagiert. Zum Beispiel, wenn Sie Closemainwindow für einen Prozess aufrufen, die eine Benutzeroberfläche hat, um die Anforderung an das Betriebssystem beenden das zugehörige Verfahren nicht behandelt werden können, wenn der Prozess geschrieben wird nie seine Meldungsschleife eingeben. Diese Überlastung stellt sicher, dass alle Verarbeitung abgeschlossen ist, einschließlich der Handhabung von asynchronen Ereignissen für die umgeleitete Standardausgabe. Sie sollten diese Überlastung nach einem Aufruf der WaitForExit (Int32) Überlast verwenden, wenn Standardausgabe auf asynchrone Ereignishandler umgeleitet wurde. Das ist natürlich für. NET. Was macht Sie denken, dass es nicht warten, bis die Note-Prozess zu beenden Was sind die Zeichen dafür, was ist der Beweis Freitag, 20. Februar 2009 20.13 Nicht sicher, ob dies geändert hat, aber vor kurzem wieder in den Tag Anwendungen auf dem Fenster Handy nie wirklich geschlossen, wenn Sie die X schließe sie zu schließen, würden sie nur minimieren und halten im Hintergrund laufen (dies war kein Fehler, es war ein Feature, da das nächste Mal starten Sie die App würde es wirklich schnell gestartet werden, yah Ich weiß, wahnsinnig, aber wahr), so könnte das sein, warum WaitForExit ist vielleicht seltsam verhalten und warten auf App-Start anstelle von Exit. Aber dann ist es nur Spekulation auf knowlegde der alten Versionen von Windows Mobile basiert. Freitag, den 20. Februar 2009 um 11:03 Uhr Id wie zu stoßen diese Frage auf. Im auf Windows Mobile 6 Standard und Im versuchen, eine Browser-Instanz spawn. Id wie zu warten, bis der Benutzer den Browser schließt. Aber WaitForExit kommt extrem schnell zurück. Hier ist der Code: Prozess p neue Process () p. StartInfo. Arguments quotexample-sitequot p. StartInfo. Verb quotOpenquot p. StartInfo. UseShellExecute falsch p. StartInfo. FileName quotIExplore. exequot p. Start () p. WaitForExit () MessageBox. Show (quotNow der Browser sollte closedquot sein) Was sollte der richtige Weg, um die erwarteten Resuts erhalten werden, wo das Symbol ist. Symbol. AlexB Dienstag, 9. Juni 2009 09:58 Ich sehe das gleiche Problem, aber auf XP. Ich denke, der Beweis kann in jedem Debugger gesehen werden (wie ich sehe), oder in jeder Konsolenanwendung (nicht unbedingt auf Mobile) Mittwoch, 2. September 2009 8.35 Uhr Außer, dass Sie nicht erhalten dann ein Prozess-Objekt, das Sie können benutzen. MyProc. WaitForExit () Es wird immer noch sofort zurückgegeben, wenn Sie Dim MyProc als neuen Prozess () myProc Process. Start (quotiexplorequot, quotfinance. yahooqhpsquot Symbol) versuchen. Mittwoch, 2. September 2009 20.48 Uhr Problem ist, dass Sie nicht eine neue Instanz von iexplore. exe starten. Sie erstellen lediglich ein neues Fenster zum bestehenden Prozess. Meine Vermutung ist, iexplore. exe startet, sieht eine vorhergehende Instanz und kommuniziert mit der vorherigen Instanz, so dass es das neue Fenster öffnet, und dann diese Instanz, die Sie sofort beendet verlassen. Das Verhalten ist also richtig und zu erwarten. Blog. voidnish Mittwoch, den 2. September 2009 um 20:52 Uhr Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für eine Teilnahme entscheiden, wird Ihnen die Online-Umfrage präsentiert, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen

No comments:

Post a Comment