Wednesday 21 June 2017

Prozess Waitforexit Nicht Warten


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 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 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 08.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 teilnehmen. WaitForExit-Methode () WaitForExit () stellt den aktuellen Thread ab, bis der zugehörige Prozess beendet wird. Es sollte aufgerufen werden, nachdem alle anderen Methoden auf den Prozess aufgerufen werden. Verwenden Sie das Ereignis Exited, um zu verhindern, dass der aktuelle Thread blockiert wird. Diese Methode weist die Prozesskomponente an, eine unbegrenzte Zeitspanne zu warten, damit Prozess - und Ereignisbehandlungsroutinen beendet werden können. 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. In der Framework 3.5 und früheren Versionen wartete die WaitForExit () - Überladung für MaxValue Millisekunden (ca. 24 Tage), nicht unbegrenzt. Auch die vorherigen Versionen haben nicht darauf gewartet, dass die Ereignisbehandlungsroutinen beendet werden, wenn die volle MaxValue-Zeit erreicht wurde. 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. Wenn ein zugehöriger Prozess beendet wird (dh, wenn er vom Betriebssystem durch eine normale oder abnormale Beendigung beendet wird), speichert das System Verwaltungsinformationen über den Prozess und kehrt zu der Komponente zurück, die WaitForExit () aufgerufen hat. Die Process-Komponente kann dann auf die Informationen zugreifen, zu denen auch die ExitTime gehört. Indem Sie den Handle für den beendeten Prozess verwenden. Da der zugehörige Prozess beendet ist, weist die Handle-Eigenschaft der Komponente nicht mehr auf eine vorhandene Prozessressource hin. Stattdessen kann der Handle nur verwendet werden, um auf die Betriebssystem-Informationen über die Prozessressource zuzugreifen. Das System ist sich bewusst, dass Prozesse, die nicht von Process-Komponenten freigegeben wurden, von Handles erkannt werden, sodass die ExitTime - und Handle-Informationen im Speicher bleiben, bis die Process-Komponente die Ressourcen freigegeben hat. Wenn Sie Start für eine Prozessinstanz aufrufen, rufen Sie deshalb Close auf, wenn der zugehörige Prozess beendet wurde und Sie keine Verwaltungsinformationen mehr benötigen. Schließen beendet den Speicher, der dem beendeten Prozess zugewiesen ist.

No comments:

Post a Comment