Wednesday, February 22, 2017

Waitforexit Pas Attend Pour Toujours

Re: Process. WaitForExit () ne semble pas attendre indéfiniment From. Jeroen Mostert ltjmostertxxxxxxxxx gt Date. Tue, 19 Feb 2008 18:35:05 0100 psstone a écrit: La documentation de Process. WaitForExit () indique qu'il va attendre indéfiniment pour son processus associé à la sortie. Il semble que cet appel retournera après millisecondes int. MaxValue même si le processus auquel il fait référence est toujours en cours d'exécution. C'est correct. Process. WaitForExit () est mis en œuvre en attendant précisément 2 147 483 647 millisecondes. Cela semble être une erreur de conception, car la documentation pour le. La méthode WaitForExit (int milliseconds) indique: quotLe temps, en millisecondes, à attendre que le processus associé se termine. Le maximum est la plus grande valeur possible d'un entier de 32 bits, ce qui représente l'infini pour le système d'exploitation. quot C'est clairement faux. Un délai d'attente infini est représenté au système d'exploitation avec la valeur 1, dont la configuration binaire est la plus grande valeur possible d'un entier non signé de 32 bits. Cela est difficile à tester car il faut attendre un peu moins de 25 jours pour reproduire le problème mais je l'ai observé sur 4 systèmes différents exécutant à la fois Vista et XPSP2. Est ce un problème de savoir et si oui, y at il un correctif disponible pour elle Pas que je sache. Toutefois, son assez facile à contourner en appelant Process. WaitForExit (Timeout. Infinite) à la place. Cela devrait attendre éternellement. Cependant, parce que Process. WaitForExit attend 0x7ffffff pour être utilisé comme la valeur quotinfinityquot magique, il ya un petit problème si vous avez redirigé IO pour le processus, car (contrairement normalement) l'attente retournera avant IO sur les flux a terminé. Cela signifie que l'attente peut revenir avec les flux dans un état non valide, ce qui peut provoquer des exceptions inattendues et / ou la perte de données. Si vous n'avez pas redirigé IO, ce n'est pas un problème. Laisse 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 à 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 tous les traitements sont terminés, 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. 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, Février 20, 2009 8:13 PM Je 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 auraient juste de minimiser et de 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 attendant le démarrage de l'application au lieu de la sortie. Mais encore une fois c'est juste spéculation basée sur le savoir des versions anciennes de Windows Mobile. Vendredi, Février 20, 2009 11:03 PM Id comme à 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: Process 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) Wednesday, September 02, 2009 8:35 PM Sauf que vous n'avez pas alors obtenir un objet de processus que vous pouvez utilisation. Si vous essayez Dim myProc As NewProcess () myProc Process. Start (quotiexplorerquot, quotfinance. yahooqhpsquot symbole) myProc. WaitForExit () Il retourne toujours immédiatement. Wednesday, September 02, 2009 8:48 PM 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