Redirect et analyse syntaxique en temps réel stdout d'un processus en cours d'exécution longue dans vb.net

StackOverflow https://stackoverflow.com/questions/2623028

Question

Ce code exécute "handbrakecli" (une application de ligne de commande) et place la sortie dans une chaîne:

Dim p As Process = New Process    
p.StartInfo.FileName = "handbrakecli"
p.StartInfo.Arguments = "-i [source] -o [destination]"
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.Start

Dim output As String = p.StandardOutput.ReadToEnd
p.WaitForExit 

Le problème est que cela peut prendre jusqu'à 20 minutes pour terminer au cours de laquelle rien ne sera rapporté à l'utilisateur. Une fois qu'il a terminé, ils vont voir tous les résultats de l'application qui comprend les détails de progrès. Pas très utile.

Par conséquent, je suis en train de trouver un exemple qui montre la meilleure façon de:

  1. Démarrer une application externe (cachée)
  2. Surveiller sa sortie périodiquement car il affiche des informations au sujet de son progrès (pour que je puisse l'extraire et de présenter une barre de pourcentage agréable à l'utilisateur)
  3. Déterminer le moment où l'application externe est terminée (donc je ne peux pas continuer avec mes propres applications d'exécution)
  4. Tuer la demande externe si nécessaire et détecter quand cela est arrivé (de sorte que si l'utilisateur clique sur « Annuler », je reçois prendre les mesures appropriées)

quelqu'un n'a des extraits de code recommandé?

Était-ce utile?

La solution

La propriété standardOutput est de type StreamReader, qui présente des méthodes autres que ReadToEnd. Il serait plus de code, mais si vous avez utilisé la méthode Read, vous pouvez faire d'autres choses comme fournir à l'utilisateur la possibilité d'annuler ou de signaler un certain type de progrès.

Lien vers Méthode de lecture avec exemple de code:

http://msdn.microsoft. com / fr-fr / bibliothèque / ath1fht8 (v = VS.90) .aspx

Edit:

La classe de procédé présente également un procédé de BeginOutputReadLine qui est un appel de méthode asynchrone avec rappel.

http: //msdn.microsoft.com/en-us/library/system.diagnostics.process.beginoutputreadline(v=VS.90).aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top