Friday 3 March 2017

Standard Output C # Process Waitforexit

Lassen Sie uns lesen, was MSDN darüber sagt: Die WaitForExit () () () - Überlastung wird verwendet, um den aktuellen Thread zu warten, bis der zugehörige 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. Wenn Sie zum Beispiel CloseMainWindow für einen Prozess aufrufen, der über eine Benutzeroberfläche verfügt, wird die Anforderung des Betriebssystems, den zugeordneten Prozess zu beenden, möglicherweise nicht bearbeitet, wenn der Prozess geschrieben wird, um niemals in seine Nachrichtenschleife zu gelangen. Diese Überlastung stellt sicher, dass alle Verarbeitung abgeschlossen ist, einschließlich der Behandlung von asynchronen Ereignissen für umgeleitete Standardausgabe. Sie sollten diese Überladung nach einem Aufruf der WaitForExit (Int32) - Uberlast verwenden, wenn die Standardausgabe zu asynchronen Ereignisbehandlungsroutinen umgeleitet wurde. Das ist natürlich für. 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, seit dem nächsten Mal starten Sie die Anwendung es würde 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 wieder 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: Process p new Process () p. StartInfo. Argumente quotexample-sitequot p. StartInfo. Verb quotOpenquot p. StartInfo. UseShellExecute false p. StartInfo. FileName quotIExplore. exequot p. Start () p. WaitForExit () MessageBox. Show ("Now der Browser sollte closedquot sein) Was sollte der richtige Weg, um die erwarteten Resuts erhalten werden, wenn das Symbol ist. Symbol. AlexB Tuesday, June 9, 2009 9:58 PM 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 versuchen, Dim myProc als neuen Prozess () myProc Process. Start (quotiexplorequot, quotfinance. yahooqhpsquot Symbol) Mittwoch, 2. September 2009 20:48 Problem ist, dass Sie keine neue Instanz von iexplore. exe starten. Sie erstellen nur ein neues Fenster zum bestehenden Prozess. Meine Vermutung ist iexplore. exe startet, sieht eine vorherige Instanz und kommuniziert mit der vorherigen Instanz, so dass es öffnet sich das neue Fenster, und dann diese Instanz Sie begann sofort beendet. So ist das Verhalten 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 die Teilnahme entscheiden, wird Ihnen die Online-Umfrage präsentiert, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmenHi, Ich bin die Entwicklung einer C-Konsole-Anwendung, die eine Kommandozeile startet und bekommt einige Daten durch einen anderen Befehl (was in dieser Diskussion irrelevant ist). Irgendwann werde ich einige Daten in der Befehlszeile und ich brauche nur die letzte Zeile, die. Ich habe den folgenden Code verwendet: Process. StartInfo. FileName quotcmd. exequot Process. StartInfo. RedirectStandardInput true Process. StartInfo. RedirectStandardOutput true Ich habe Process. StandardInput. WriteLine verwendet, um die Befehle zu schreiben, die ich an der Konsole benötige. Aber wenn Process. StartInfo. RedirectStandardOutput true ist, erhalte ich nicht die erforderliche Ausgabe mit der Anweisung Process. StandardOutput. ReadToEnd () Split (n) Wohingegen ReadLine Option gut funktioniert und ich bekomme die erste Zeile des Textes angezeigt. Da jedesmal die Daten, die ich auf der Konsole bekomme, unterschiedlich sind, kann ich nicht hartcodieren jede spezifische Loaction von wo ich meine Ausgabe bekommen. Auch wenn ich eine Watch auf die Anweisung Process. StandardOutput. ReadToEnd (). Split (n) Ich erhalte eine Funktion Timeout-Ausnahme. Bitte helfen Sie mir mit diesem Problem. Donnerstag, August 07, 2008 5:44 AM Also habe ich Manjus-Code kopiert. Myprocesss quotcmd. exequot. Zuerst schickte ich den Befehl quotipconfigquot mit einem readToEnd () Timed out. Versuchtes Lesen in Blöcken, scheiterte auch. Bewährte waitForInputIddle (), aber vergessen, cmd hat keine grafische Benutzeroberfläche, fehlgeschlagen. Also brauchte ich das cmd, um den Stream zu beenden, wenn ich es jemals lesen wollte. Ok so Ausfahrt Ich versuchte, alle meine Befehle zu senden, INKLUSIVE den Befehl exit zuerst, dann lesen. SIn. WriteLine (quotipconfigquot) sIn. WriteLine (quotipconfig allquot) sIn. WriteLine (quotexitquot) string strOutPut sOut. ReadToEnd () Funktioniert wie ein Zauber. Mein ReadToEnd () gibt einen String in einer halben Sekunde, und ich bekam alle Informationen, die ich brauche. -) Das könnte Ihnen helfen, Gauri. Das Unwahrscheinliche, das Unmögliche dauert nur ein wenig länger. - Steven Parker Marked als Antwort von Jack 321 Montag, 11. August 2008 07:51 ReadToEnd () ist geeignet, Deadlock verursachen, vor allem, wenn Sie es nach einem WaitForExit () oder senden Eine Menge von Input. Der Prozess schreibt seine Ausgabe in einen Puffer, der Puffer ist nicht sehr groß (2KB denke ich). Sie lesen den Inhalt dieses Puffers nicht, sagen wiith ReadLine (), der Prozess wird abwarten und warten, bis der Puffer geleert wird. Ihr Programm wird abgebrochen, da WaitForExit () nie zurückkehren wird, oder der WriteLine () - Aufruf wird gestoppt, da der Prozess nicht mehr gelesen wird. Wenn das Ihr Szenario, youll müssen asynchron mit BeginOutputReadLine () lesen. Hans Passant. Antwort # 2 am: April 12, 2008, 06:48:50 pm »Sie müssen auch Process. StartInfo. UseShellExecute auf false gesetzt. Als Antwort markiert von jack 321 Montag, 11. August 2008 05:43 Die oben genannte Antwort ist eine sehr nette Antwort. Ich denke nicht, dass das quotcmdquot den Strom beendet. Von der cmd-Box wird nichts gesendet, um anzuzeigen, dass der Stream beendet wird. Betrachten Sie eine Webseite, die Sie laden, sobald der gesamte HTML-Code Ihren PC erreicht hat, ist der Stream fertig. Das gleiche beim Lesen einer Datei, sobald Sie das letzte Zeichen erreicht haben, ist der Stream fertig. Allerdings mit cmd, ist der Stream nicht quotdonequot. Es wartet nur auf neue Eingabe, dann, wenn Sie ihm einen anderen Befehl geben, wird es Ausgabe wieder haben. Hmm Ich scheine, Probleme zu haben, mich in Englisch wieder auszudrücken, meine Entschuldigungen. Anyways, I dont think theres alles, was Sie tun können, um ReadToEnd () auf einem cmd-output-Stream verwenden, es sei denn, Sie senden es den Befehl quotexitquot. Haben Sie versucht, die readline () mit einem kombinieren. Eine Analyse der Linie (d. h. erhalten Sie leere Zeilen) oder b. Den Process. WaitForIddleInput () - Befehl Das Unwahrscheinliche tun wir, das Unmögliche dauert nur ein wenig länger. - Steven Parker Donnerstag, 7. August 2008 07:35 Uhr Falls Sie cmd Prozess laufen lassen. Remeber, um queryEXITquot in Eingabestream zu schreiben Thursday, August 07, 2008 7:51 AM Also habe ich Manjus-Code kopiert. Myprocesss quotcmd. exequot. Zuerst schickte ich den Befehl quotipconfigquot mit einem readToEnd () Timed out. Versuchtes Lesen in Blöcken, scheiterte auch. Bewährte waitForInputIddle (), aber vergessen, cmd hat keine grafische Benutzeroberfläche, fehlgeschlagen. Also brauchte ich das cmd, um den Stream zu beenden, wenn ich es jemals lesen wollte. Ok so Ausfahrt Ich versuchte, alle meine Befehle zu senden, INKLUSIVE den Befehl exit zuerst, dann lesen. SIn. WriteLine (quotipconfigquot) sIn. WriteLine (quotipconfig allquot) sIn. WriteLine (quotexitquot) string strOutPut sOut. ReadToEnd () Funktioniert wie ein Zauber. Mein ReadToEnd () gibt einen String in einer halben Sekunde, und ich bekam alle Informationen, die ich brauche. -) Das könnte Ihnen helfen, Gauri. Das Unwahrscheinliche, das Unmögliche dauert nur ein wenig länger. - Steven Parker Marked als Antwort von Jack 321 Montag, 11. August 2008 07:51 ReadToEnd () ist geeignet, Deadlock verursachen, vor allem, wenn Sie es nach einem WaitForExit () oder senden Eine Menge von Input. Der Prozess schreibt seine Ausgabe in einen Puffer, der Puffer ist nicht sehr groß (2KB denke ich). Sie lesen den Inhalt dieses Puffers nicht, sagen wiith ReadLine (), der Prozess wird abwarten und warten, bis der Puffer geleert wird. Ihr Programm wird abgebrochen, da WaitForExit () nie zurückkehren wird, oder der WriteLine () - Aufruf wird gestoppt, da der Prozess nicht mehr gelesen wird. Wenn das Ihr Szenario, youll müssen asynchron mit BeginOutputReadLine () lesen. Hans Passant. Als Antwort markiert von Jack 321 Montag, 11. August 2008 05:44 Uhr Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für die Teilnahme entscheiden, wird Ihnen die Online-Umfrage präsentiert, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen


No comments:

Post a Comment