Wie dauerhaft ist WaitForExit (). Ich meine, gibt es irgendetwas eine Alternative, die man tun kann, um das Warten zu brechen, sonst werde ich meinen Thread in einer separaten Funktion ausführen und ihn durch globale Variablen steuern. Grund - ein CMD. EXE-Thread, bei dem eine Konsolenanwendung ausgeführt wird, die wir vor dem Thread beenden müssen, der seinen Kurs ausführt. Hier ist, was wir haben: Process psi new Process (quotCMD. EXEquot, query) psi. UseShellExecute useShellExec psi. RedirectStandardOutput stdout psi. CreateNoWindow nowindow hbProc neue Process () hbProc Process. Start (psi) hbProc. WaitForExit () Nun, man könnte Verwendung: while (hbProc. WaitForExit (someTimeout)) if (ShouldCancel) Pause Am 19. September, 5:15 Uhr, quotMarc Gravellquot ltmarc. grav. Schrieb: gt Nun, könnten Sie verwenden: gt gt while (hbProc. WaitForExit (someTimeout)) gt if (ShouldCancel) brechen gt gt gt gt Marc (beachten Sie, gibt es keinen Grund, sowohl die neue Process () und den Prozess aufzurufen. Start (psi) Oder Sie könnten verwenden: hbProc neue Process () hbProc. EnableRaisingEvents wahre hbProc. Exited neuen Event-Handler (functionToCallAfterProcesit) hbProc. StartInfo psi hbProc. Start () andere Gewinde - auf Mangel Veranstaltung abzusagen: hbProc - neue Event-Handler ( FunktionToCallAfterProcesit) In jedem Fall nur bewusst sein, die potenzielle Race-Bedingung zwischen dem Prozess verlassen und der Wunsch, die Wartezeit abzubrechen xtra. co. nzgt schrieb: gt Wie dauerhaft ist WaitForExit () Ich meine, es gibt etwas, was ein gt Alternative kann man tun, um das Warten zu brechen, sonst werde ich führen Sie meine Thread gt in einer separaten Funktion, und steuern sie durch globale Variablen. Gt Ursache - ein CMD. EXE-Thread, mit einer Konsole Anwendung läuft, die wir gt müssen aus der vor dem Thread, der seinen Kurs läuft zu stornieren. Hier gt ist, was wir haben: gt Process psi neue gt Process (quotCMD. EXEquot, Abfrage) gt psi. UseShellExecute useShellExec gt psi. RedirectStandardOutput stdout gt psi. CreateNoWindow nowindow gt hbProc neue Process () gt hbProc Process. Start (psi) gt HbProc. WaitForExit () gt gt Danke, gt Alistair. Sie können entweder den Thread, der WaitForExit () ausführt, töten oder die Überladung verwenden, mit der Sie ein Timeout bool WaitForExit (int msToWait) angeben können. Wenn Sie es in einem separaten Thread und töten es youre gehen, um eine unterbrochene Ausnahme erhalten. Möglicherweise möchten Sie sicherstellen, dass der Prozess, den Sie gestartet haben, nicht noch läuft (wenn es ist, töten). Gt Sie können den Thread, der WaitForExit () ausführt, entweder töten oder die gt-Überladung verwenden, mit der Sie ein Timeout bool WaitForExit (int gt msToWait) angeben können. Wenn Sie es in einem separaten Thread und töten es youre gt eine unterbrochene Ausnahme erhalten. Vielleicht möchten Sie sicherstellen, dass der gt-Prozess, den Sie gestartet haben, nicht noch läuft (wenn es ist, töten). Gt Danke Jungs mit den Vorschlägen, die nützlich sind. Will raten, welche Option am besten funktioniert. Al. Copyright-Kopie 2005-2016, TechTalkz. Alle Rechte vorbehalten. Ich bin neu in der Thread-Modell in. Was würden Sie verwenden, um: starten Sie einen Prozess, der eine Datei verarbeitet (process. StartInfo. FileName fileName) auf den Benutzer warten, um den Prozess zu schließen oder den Thread nach einiger Zeit aufzugeben, wenn der Benutzer den Prozess geschlossen, löschen Sie die Datei Starten des Prozesses und Warten sollte auf einem anderen Thread als dem Hauptthread erfolgen, da dieser Vorgang die Anwendung nicht beeinträchtigen sollte. Meine Anwendung erzeugt einen HTML-Bericht. Der Benutzer kann mit der rechten Maustaste irgendwo klicken und sagen View Report - jetzt erhalte ich den Berichtinhalt in einer temporären Datei und starten Sie den Prozess, der HTML-Dateien behandelt, d. H. Der Standardbrowser. Das Problem ist, dass ich nicht bereinigen kann, d. h. die temp-Datei löschen. Gesendet am Mrz 04 09 um 15:35 Mein Prozess wandelt Dateien in. Flv und spielt sie mit Javascript. Wenn ich die Funktion ohne einen Thread. Sleep () aufrufen, nachdem es. Ich kann nicht die Konvertierung noch der Spieler bcoz der Thread nicht Zeit haben, um seine Arbeit zu beenden, bevor die Seite load..butwhen ich einen Schlaf nach der Funktion. Das ist, wenn ich meinen Player bekomme. Ndash Grace Jul 11 11 am 11:24 Hinzufügen einer erweiterten Alternative zu dieser alten Frage. Wenn Sie warten möchten, dass ein Prozess beendet wird, ohne einen Thread zu sperren und immer noch Timeouts zu unterstützen, versuchen Sie Folgendes: Wieder ist der Vorteil gegenüber der akzeptierten Antwort, dass Sie keine Threads blockieren, was den Overhead Ihrer App reduziert . Ich würde wahrscheinlich nicht einen separaten Prozess für das Öffnen einer Datei verwenden. Stattdessen verwenden Id wahrscheinlich einen Hintergrund-Thread (wenn ich dachte, die Operation würde eine lange Zeit dauern und möglich Block der UI-Thread). Natürlich ist dies nicht ein gutes Beispiel (es gibt nichts) und ich habe nicht gezeigt, wie die Benutzeroberfläche aktualisiert wird (Sie müssen BeginInvoke auf der Benutzeroberfläche verwenden, weil ein Hintergrund-Thread kann nicht aktualisieren Sie die UI-Thread). Aber dieser Ansatz ist in der Regel, wie ich über die Handhabung asynchronen Operationen in gehen. Ich bin neu auf dem Thread - Modell in. Was würden Sie verwenden, um: starten Sie einen Prozess, der eine Datei verarbeitet (process. StartInfo. FileName fileName) auf den Benutzer warten, um den Prozess zu schließen oder den Thread nach einiger Zeit aufzugeben, wenn der Benutzer den Prozess geschlossen, löschen Sie die Datei Starten des Prozesses und Warten sollte auf einem anderen Thread als dem Hauptthread erfolgen, da dieser Vorgang die Anwendung nicht beeinträchtigen sollte. Meine Anwendung erzeugt einen HTML-Bericht. Der Benutzer kann mit der rechten Maustaste irgendwo klicken und sagen View Report - jetzt erhalte ich den Berichtinhalt in einer temporären Datei und starten Sie den Prozess, der HTML-Dateien behandelt, d. H. Der Standardbrowser. Das Problem ist, dass ich nicht bereinigen kann, d. h. die temp-Datei löschen. Gesendet am Mrz 04 09 um 15:35 Mein Prozess wandelt Dateien in. Flv und spielt sie mit Javascript. Wenn ich die Funktion ohne einen Thread. Sleep () aufrufen, nachdem es. Ich kann nicht die Konvertierung noch der Spieler bcoz der Thread nicht Zeit haben, um seine Arbeit zu beenden, bevor die Seite load..butwhen ich einen Schlaf nach der Funktion. Das ist, wenn ich meinen Player bekomme. Ndash Grace Jul 11 11 am 11:24 Hinzufügen einer erweiterten Alternative zu dieser alten Frage. Wenn Sie warten möchten, dass ein Prozess beendet wird, ohne einen Thread zu sperren und immer noch Timeouts zu unterstützen, versuchen Sie Folgendes: Wieder ist der Vorteil gegenüber der akzeptierten Antwort, dass Sie keine Threads blockieren, was den Overhead Ihrer App reduziert . Ich würde wahrscheinlich nicht einen separaten Prozess für das Öffnen einer Datei verwenden. Stattdessen verwenden Id wahrscheinlich einen Hintergrund-Thread (wenn ich dachte, die Operation würde eine lange Zeit dauern und möglich Block der UI-Thread). Natürlich ist dies nicht ein gutes Beispiel (es gibt nichts) und ich habe nicht gezeigt, wie die Benutzeroberfläche aktualisiert wird (Sie müssen BeginInvoke auf der Benutzeroberfläche verwenden, weil ein Hintergrund-Thread kann nicht aktualisieren Sie die UI-Thread). Aber dieser Ansatz ist in der Regel, wie ich über die Handhabung asynchronen Operationen in gehen. Beantwortet Mar 4 09 um 15: 46Wie dauerhaft ist WaitForExit (). Ich meine, gibt es irgendetwas eine Alternative, die man tun kann, um das Warten zu brechen, sonst werde ich meinen Thread in einer separaten Funktion ausführen und ihn durch globale Variablen steuern. Grund - ein CMD. EXE-Thread, bei dem eine Konsolenanwendung ausgeführt wird, die wir vor dem Thread beenden müssen, der seinen Kurs ausführt. Hier ist, was wir haben: Process psi new Process (quotCMD. EXEquot, query) psi. UseShellExecute useShellExec psi. RedirectStandardOutput stdout psi. CreateNoWindow nowindow hbProc neue Process () hbProc Process. Start (psi) hbProc. WaitForExit () Nun, man könnte Verwendung: while (hbProc. WaitForExit (someTimeout)) if (ShouldCancel) Pause Am 19. September, 5:15 Uhr, quotMarc Gravellquot ltmarc. grav. Schrieb: gt Nun, könnten Sie verwenden: gt gt while (hbProc. WaitForExit (someTimeout)) gt if (ShouldCancel) brechen gt gt gt gt Marc (beachten Sie, gibt es keinen Grund, sowohl die neue Process () und den Prozess aufzurufen. Start (psi) Oder Sie könnten verwenden: hbProc neue Process () hbProc. EnableRaisingEvents wahre hbProc. Exited neuen Event-Handler (functionToCallAfterProcesit) hbProc. StartInfo psi hbProc. Start () andere Gewinde - auf Mangel Veranstaltung abzusagen: hbProc - neue Event-Handler ( functionToCallAfterProcesit) In jedem Fall werden nur sich der möglichen Racebedingung zwischen dem Prozess austritt und dem Wunsch, die Wartezeit zu stornieren Am 19. September, 04.11 Uhr, Alistair George ltnon xtra. co. nzgt schrieb:.. gt Wie dauerhaft ist WaitForExit () ich meine, ist es etwas, was eine Alternative gt man tun kann, um die Warte zu brechen sonst werde ich meinen Thread gt in einer separaten Funktion ausführen, und sie steuern, indem globale Variablen gt Grund -.. ein CMD. EXE Gewinde, mit einer Konsole Anwendung läuft, die wir gt müssen aus der vor dem Thread, der seinen Kurs läuft zu stornieren. Hier gt ist, was wir haben: gt Process psi neue gt Process (quotCMD. EXEquot, Abfrage) gt psi. UseShellExecute useShellExec gt psi. RedirectStandardOutput stdout gt psi. CreateNoWindow nowindow gt hbProc neue Process () gt hbProc Process. Start (psi) gt HbProc. WaitForExit () gt gt Danke, gt Alistair. Sie können entweder den Faden Lauf WaitForExit () zu töten oder die Überlastung, die Sie einen Timeout Bool WaitForExit angeben können (int msToWait). Wenn Sie es in einem separaten Thread und töten es youre gehen, um eine unterbrochene Ausnahme erhalten. Möglicherweise möchten Sie sicherstellen, dass der Prozess, den Sie gestartet haben, nicht noch läuft (wenn es ist, töten). gt können Sie entweder den Faden Lauf WaitForExit () zu töten oder die gt Überlastung verwenden, die Sie einen Timeout Bool WaitForExit angeben können (int gt msToWait). Wenn Sie es in einem separaten Thread und töten es youre gt eine unterbrochene Ausnahme erhalten. Vielleicht möchten Sie sicherstellen, dass der gt-Prozess, den Sie gestartet haben, nicht noch läuft (wenn es ist, töten). Gt Danke Jungs mit den Vorschlägen, die nützlich sind. Will raten, welche Option am besten funktioniert. Al. Copyright-Kopie 2005-2016, TechTalkz. Alle Rechte vorbehalten.
No comments:
Post a Comment