Saturday, March 18, 2017

Processus Waitforexit C # Exemple Standard

Elina: merci pour votre réponse. Certaines notes au bas de cette doc MSDN (msdn. microsoften-uslibraryhellip) avertissent des potentiels blocages si vous lisez à la fin des flux stdout et stderr redirigés synchroniquement. Il est difficile de dire si votre solution est susceptible à ce problème. En outre, il semble que vous envoyez le process39 stdoutstderr sortie en arrière en entrée. Pourquoi. ) Ndash Matthew Piatt Sep 26 16 at 4:42 Il s'agit d'une solution plus moderne, attendue, Task Parallel Library (TPL) pour 4.5 et plus. Exemple d'utilisation Exécution répondu Oct 5 16 at 10:54 I chose que c'est simple et mieux approche (nous n'avons pas besoin AutoResetEvent): Répondue 14 juin à 14h29 Vrai, mais shouldn39t vous faites. File Name Chemin quotggsci. exequot quot lt Obeycommand. txtquot pour simplifier votre code trop Ou peut-être quelque chose d'équivalent à quotecho quotggsci. exequot quotggsci. exequot commande si vous ne don39t vraiment envie d'utiliser un fichier obeycommand. txt distinct. Ndash Amit Naidu Jun 4 13 at 22:03 Votre solution n'a pas besoin AutoResetEvent mais vous sondage. Lorsque vous faites des sondages au lieu d'utiliser l'événement (quand ils sont disponibles), alors vous utilisez l'UC sans raison et qui indiquent que vous êtes un mauvais programmeur. Votre solution est vraiment mauvaise par rapport à l'autre utilisant AutoResetEvent. (Mais je ne vous ai pas donné -1 parce que vous avez essayé d'aider). Ndash Eric Ouellet Nov 7 14 at 18:38 J'avais le même problème, mais la raison était différente. Cela se produira toutefois sous Windows 8, mais pas sous Windows 7. La ligne suivante semble avoir causé le problème. La solution était de ne pas désactiver UseShellExecute. J'ai maintenant reçu une fenêtre popup Shell, qui est indésirable, mais beaucoup mieux que le programme d'attente pour rien de particulier à se produire. Donc, j'ai ajouté le travail suivant autour de cela: Maintenant, la seule chose qui me dérange est de savoir pourquoi cela se passe sous Windows 8 en premier lieu. J'ai essayé de faire une classe qui permettrait de résoudre votre problème en utilisant asynchrone flux lire, en prenant en compte Mark Byers, Rob, stevejay réponses. Ce faisant, j'ai réalisé qu'il y avait un bug lié au flux de sortie du processus asynchrone. Vous ne pouvez pas faire cela: Vous recevrez System. InvalidOperationException. StandardOut n'a pas été redirigé ou le processus n'a pas encore démarré. Ensuite, vous devez démarrer une sortie asynchrone lue après le démarrage du processus: En faisant cela, faites une condition de course car le flux de sortie peut recevoir des données avant de le définir en asynchrone: alors certaines personnes pourraient dire que vous avez juste à lire le flux avant vous Définissez-le en mode asynchrone. Mais le même problème se produit. Il y aura une condition de course entre la lecture synchrone et configurera le flux en mode asynchrone. Il n'existe aucun moyen de réaliser une lecture asynchrone sécurisée d'un flux de sortie d'un processus de la manière réelle Process et ProcessStartInfo a été conçu. Vous êtes probablement mieux en utilisant la lecture asynchrone comme suggéré par d'autres utilisateurs pour votre cas. Mais vous devriez être conscient que vous pourriez manquer certaines informations en raison de course condition. Lets lire ce que MSDN dit à ce sujet: La surcharge WaitForExit () () () est utilisé pour faire 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 anciennes versions 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