Thursday, January 5, 2017

Prozess Waitforexit Beispiel C #

Ihre Lösung braucht nicht AutoResetEvent aber Sie poll. Wenn Sie die Umfrage statt der Verwendung von Event (wenn sie verfügbar sind), dann sind Sie mit CPU ohne Grund und dass zeigen, dass Sie ein schlechter Programmierer sind. Ihre Lösung ist wirklich schlecht, wenn die anderen mit AutoResetEvent verglichen werden. (Aber ich habe dir nicht gegeben -1, weil du versucht hast zu helfen). Ndash Eric Ouellet 7. November um 18:38 Ich hatte das gleiche Problem, aber der Grund war anders. Es würde jedoch unter Windows 8, aber nicht unter Windows 7 auftreten. Die folgende Zeile scheint das Problem verursacht haben. Die Lösung war NICHT deaktivieren UseShellExecute. Ich erhielt nun ein Shell-Popup-Fenster, das unerwünscht ist, aber viel besser als das Programm wartet auf nichts Besonderes passieren. So fügte ich die folgende Arbeit-um für das hinzu: Jetzt das einzige, das mich stört, ist, warum dieses geschieht unter Windows 8 an erster Stelle. Beantwortet Jan 13 15 am 10:35 Anwendungsbeispiel ImplementationProcess. 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 unendlich lange Zeit zu warten, damit der Prozess und die Ereignisbehandlungsroutinen beendet werden können. Dies kann dazu führen, dass eine Anwendung nicht mehr reagiert. Wenn Sie beispielsweise 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. NET Framework 3.5 und früheren Versionen wartete die WaitForExit () - Überladung für MaxValue Millisekunden (ca. 24 Tage), nicht unbegrenzt. Auch frühere Versionen warteten nicht, bis die Ereignishandler beendet wurden, wenn die volle MaxValue-Zeit erreicht war. Diese Überlastung stellt sicher, dass alle Verarbeitung abgeschlossen ist, einschließlich der Handhabung von asynchronen Ereignissen für die umgeleitete Standardausgabe. Sie sollten diese Überladung nach einem Aufruf der WaitForExit (Int32) - Uberladung verwenden, wenn die Standardausgabe auf asynchrone 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 Handles für verlassene Prozesse, die nicht von Process-Komponenten freigegeben wurden, bewahrt werden, sodass es die ExitTime - und Handle-Informationen im Speicher beibehält, bis die Prozesskomponente die Ressourcen spezifisch freigibt. 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. WaitForExit-Methode (Int32) WaitForExit (Int32) macht den aktuellen Thread, 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 endliche Zeitspanne zu warten, bis der Prozess beendet wird. Wenn der zugeordnete Prozess nicht durch das Ende des Intervalls beendet wird, da die Anforderung zum Beenden verweigert wird, wird false an die aufrufende Prozedur zurückgegeben. Sie können eine negative Zahl (unendlich) für Millisekunden angeben. Und Prozess. WaitForExit (Int32) verhält sich wie die WaitForExit () - Überlastung. Wenn Sie 0 (Null) an die Methode übergeben, gibt es nur true zurück, wenn der Prozess bereits beendet wurde, es sofort false zurückgibt. In. NET Framework 3.5 und früheren Versionen, wenn Millisekunden -1 war, wartete die WaitForExit (Int32) - Uberladung für MaxValue Millisekunden (ca. 24 Tage), nicht auf unbestimmte Zeit. Wenn die Standardausgabe auf asynchrone Ereignishandler umgeleitet wurde, ist es möglich, dass die Ausgabeverarbeitung nicht abgeschlossen ist, wenn diese Methode zurückgegeben wird. Um sicherzustellen, dass die asynchrone Ereignisbehandlung abgeschlossen ist, rufen Sie die WaitForExit () - Überlastung auf, die nach dem Erhalt eines True von dieser Überladung keinen Parameter übernimmt. Legen Sie die SynchronizingObject-Eigenschaft fest, um sicherzustellen, dass das Exited-Ereignis in Windows Forms-Anwendungen ordnungsgemäß behandelt wird. Wenn ein zugehöriger Prozess beendet wird (wird durch das Betriebssystem durch eine normale oder abnormale Beendigung beendet), speichert das System Verwaltungsinformationen über den Prozess und kehrt zu der Komponente zurück, die WaitForExit (Int32) aufgerufen hatte. 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 Handles für verlassene Prozesse, die nicht von Process-Komponenten freigegeben wurden, bewahrt werden, sodass es die ExitTime - und Handle-Informationen im Speicher beibehält, bis die Prozesskomponente die Ressourcen speziell freigibt. 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