2013-10-07 2 views
-2

J'ai vu un exemple C# utilisant la fonction API ConsoleRead mais quand j'ai essayé de le traduire en VBNET, j'ai beaucoup d'erreurs, aussi dans d'autres sites comme pinvoke l'exemple unique est pour C# aussi, je ne trouve pas toute bonne information pour VBNET de la fonction API ConsoleRead (s'il existe un moyen de lire le tampon de la console sans APIS alors je ne sais pas).Comment lire le tampon de console dans VBNET?

J'ai également essayé cette Classe de lecteur de tampon de console pour VBNET (http://pastebin.com/XYxakDTV) mais il déclenche une exception non gérée avec un message comme celui-ci "Contrôleur non valide". Quelqu'un pourrait illustrer moi et toutes les autres personnes avec un exemple pour VBNET de comment lancer un processus d'une application GUI (WindowsForm) pour lire la sortie de console pour récupérer des caractères/chaînes?

MISE À JOUR:

Je ne suis pas sûr, mais je pense qu'un processus lancé (en utilisant système.Procédé classe) ne pas affecter la console à l'application, donc je pense que tous les exemples vus ici MSDN ne pouvait pas me aider: http://msdn.microsoft.com/en-us/library/system.console.aspx

+0

Comment démarrez-vous le processus? Je me serais attendu à ce que vous pourriez faire cela avec la redirection de flux, sans * besoin * P/Invoke, après tout ... –

+0

@Rowland Shaw Salut, je commence le processus comme d'habitude, le processus a sa propre barre de progression et tandis que la progression n'est pas rempli par le processus je ne peux pas lire toute la ligne (ligne de la barre de progression CLI), donc j'ai besoin de lire caractère par caractère la sortie de la console pour récupérer la progression, j'ai résolu ce problème lecteur, mais j'ai un autre problème non résolu, la sortie d'erreur de processus ne peut pas être lu (au moins j'ai essayé beaucoup de choses mais je ne peux pas le lire) donc j'espère pouvoir le lire des sorties de processus (sauf entrée) – ElektroStudios

Répondre

2

Utilisez

StandardOutput.Read 

Je pense que la réponse est la même que pour votre autre question Run a commandline process and get the output while that process still running?

Modifier vous demandez une application de formulaire pour lire la sortie de la console. Donc, nous allons avoir une application console():

Module Module1 

    Sub Main() 
     While True 
      ' data = Console.ReadKey.KeyChar 
      Dim Generator As System.Random = New System.Random() 
      Console.Write(Generator.Next(0, 100) & " ") 
      Threading.Thread.Sleep(1000) 
     End While 
    End Sub 

End Module 

Il génère un nombre séparé d'espace un par seconde. Maintenant l'application des formulaires. Ayons une forme avec un multiligne TextBox nommé txtResult et buttoncmdStart:

Private Sub cmdStart_Click(sender As Object, e As EventArgs) Handles cmdStart.Click 
     Dim ProcInfo As New ProcessStartInfo With 
      {.FileName = "DataApp.exe", .RedirectStandardOutput = True, .UseShellExecute = False} 
     Dim proc As Process = Process.Start(ProcInfo) 

     While Not proc.HasExited 
      Dim a As String = ChrW(proc.StandardOutput.Read) 
      If a = " " Then 
       txtResult.Text &= vbCrLf 
      Else 
       txtResult.Text &= a 
      End If 
      Threading.Thread.Sleep(100) 
      Application.DoEvents() 
     End While 

    End Sub 

Il écrit les chiffres à la zone de texte par une ligne. Il n'y a pas de magie API mais ça marche.

+1

Salut, bien sûr avec que je peux lire la sortie mais pas le tampon, aussi la méthode "Lire" est pour lire un un par un caractère, il renvoie seulement une valeur entière qui doit être converti en un caractère de sorte que le code en utilisant une chaîne variab le dans l'autre réponse est totalement faux car la sortie sera beaucoup de numebrs, pas de caractères ... de toute façon je sais comment faire ca mais ce n'est pas ce que j'ai demandé, comment lire le tampon (où je suppose que tout les sorties sont fusionnées dans ce tampon), mais vraiment merci de toute façon. Pardonnez mon anglais. – ElektroStudios

+2

@ElektroHacker Vous écrivez à propos de la lecture d'un tampon, cela signifie des données sérialisées. La nécessité d'analyser les nombres des cordes est ennuyante mais solvable et pas trop difficile. – IvanH

Questions connexes