Monday, 13 March 2017

C # Process Redirectstandardoutput Waitforexit Vb

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 de 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 devez être conscient que vous pourriez manquer certaines informations en raison de race condition. Execute un processus et de récupérer sa sortie Vous êtes vous déjà demandé comment Visual Studio exécute un processus comme un compilateur et affiche le texte qu'il renvoie dans sa propre fenêtre Facile et heres un exemple simple de la façon dont. Fonction partagée GetProcessText (processus ByVal As String, ByVal param As String, ByVal workingDir As String) As String Dim p As Process Nouveau Process est le nom du processus que nous voulons exécuter p. StartInfo. FileName processus If Not (workingDir) Then P. StartInfo. WorkingDirectory workingDir End Si. StartInfo. Arguments param ont besoin de mettre cela à faux pour rediriger la sortie p. StartInfo. UseShellExecute Faux p. StartInfo. RedirectStandardOutput True démarrer le processus p. Start lire toute la sortie ici nous pourrions simplement lire la ligne Par ligne et l'afficher dans une fenêtre de sortie Dim output As String p. StandardOutput. ReadToEnd attend que le processus se termine p. WaitForExit Retourne la sortie End Function Vous aimerez peut être aussi.


No comments:

Post a Comment