Friday, February 17, 2017

C # Process Class Waitforexit

À l'heure actuelle, je travaille sur une application de console Runner qui a le code suivant pour sortir le journal et d'attendre jusqu'à ce que le processus est terminé: J'ai deux questions sur ce morceau de code. J'ai remarqué que si le processus prend plus de 30 secondes, l'appel p. ExitCode bombes. Que se passe-t-il si mon processus prend seulement 1 seconde, attendra 30 secondes de toute façon ou le processus sera conseillé par le CLR demandé Feb 5 14 at 12:40 Ils cachent ces secrets dans la documentation: si vous essayez d'obtenir le ExitCode avant le Processus a quitté, la tentative lance une exception. Examinez d'abord la propriété HasExited pour vérifier si le processus associé est terminé. Quot et quotWaitForExit. Et bloque le thread en cours d'exécution jusqu'à ce que le temps soit écoulé ou le processus a quitté ndash Alex K. Feb 5 14 at 12:44 Je l'ai trouvé trop, mais je wasn39t sûr que je l'ai lu correctement. Donc, il semble que si le processus de sortie avant l'horodatage à l'intérieur du WaitForExit il n'ya pas de problèmes, mais l'inverse provoque une belle exception. Merci ndash Raffaeu Feb 5 14 at 12: 49Lets lire ce que MSDN dit à ce sujet: La surcharge WaitForExit () () () est utilisée pour faire attendre le thread actuel jusqu'à ce que le processus associé se termine. Cette méthode demande au composant Process d'attendre une quantité infinie de temps pour que le processus quitte. Cela peut provoquer une application pour cesser de répondre. Par exemple, si vous appelez CloseMainWindow pour un processus qui a une interface utilisateur, la demande au système d'exploitation de terminer le processus associé peut ne pas être gérée si le processus est écrit pour ne jamais entrer sa boucle de message. Cette surcharge garantit que tout le traitement est terminé, y compris la gestion des événements asynchrones pour la sortie standard redirigée. Vous devez utiliser cette surcharge après un appel à la surcharge WaitForExit (Int32) lorsque la sortie standard a été redirigée vers les gestionnaires d'événements asynchrones. C'est bien sûr pour. NET. Ce qui vous fait penser qu'il n'attend pas que le processus Note se termine Quels sont les signes de cela Quelle est la preuve Vendredi, 20 Février 2009 20h13 Ne sais pas si cela a changé récemment, mais de retour dans les applications jour sur la fenêtre Mobile n'a jamais vraiment fermé lorsque vous avez frappé le X pour les fermer, ils ne feraient que minimiser et continuer à courir en arrière-plan (ce n'était pas un bug, c'était une fonctionnalité, car la prochaine fois que vous démarrez l'application, il serait démarré très vite, yah Je sais, fou, mais vrai) de sorte que pourrait être pourquoi WaitForExit est peut-être se comporter étrangement et attendre le démarrage de l'application au lieu de la sortie. Mais encore une fois c'est juste la spéculation basée sur le savoir des anciennes versions de Windows Mobile. Vendredi, Février 20, 2009 11:03 PM J'aimerais bump cette question. Im sur Windows Mobile 6 Standard et Im essayant de frayer une instance de navigateur. J'aimerais attendre que l'utilisateur ferme le navigateur. Mais WaitForExit retourne extrêmement rapide. Voici le code: Processus p nouveau Process () p. StartInfo. Arguments quotexample-sitequot p. StartInfo. Verb quotOpenquot p. StartInfo. UseShellExecute faux p. StartInfo. FileName quotIExplore. exequot p. Start () p. WaitForExit () MessageBox. Show (quotNow le navigateur doit être closedquot) Quelle devrait être la bonne façon d'obtenir les résultats attendus lundi, 08 juin 2009 22h45 Où symbole est. symbole. AlexB Tuesday, June 09, 2009 21:58 Im voyant le même problème, mais sur XP. Je pense que la preuve peut être vu dans n'importe quel débogueur (comme je le vois), ou dans n'importe quelle application de console (pas nécessairement sur Mobile), sauf que vous n'avez pas alors obtenir un objet de processus que vous pouvez utilisation. Si vous essayez Dim myProc As New Process () myProc Process. Start (quotiexplorequot, quotfinance. yahooqhpsquot symbole) myProc. WaitForExit () Il retourne toujours immédiatement. Mercredi, 02 septembre 2009 20h48 Le problème est que vous ne démarrez pas une nouvelle instance de iexplore. exe. Vous créez simplement une nouvelle fenêtre sur le processus existant. Ma conjecture est iexplore. exe commence, voit une instance précédente et communique avec l'instance précédente de sorte qu'elle ouvre la nouvelle fenêtre, et alors cette instance que vous avez commencée les sorties immédiatement. Donc, le comportement est correct et à prévoir. Blog. voidnish mercredi, 02 septembre 2009 20:52 Microsoft mène actuellement un sondage en ligne pour comprendre votre opinion sur le site Web Msdn. Si vous choisissez de participer, le sondage en ligne vous sera présenté lorsque vous quitterez le site Web Msdn. Voudriez-vous participer


No comments:

Post a Comment