L'envoi d'entrée/de l'obtention de la sortie d'une application console C#/WinForms)

J'ai un formulaire avec 3 contrôles:

  1. Une zone de texte pour l'utilisateur de saisir
    commandes à envoyer à une console
    application,
  2. Un bouton pour confirmer les commandes à
    être envoyé et
  3. Lecture seule zone de texte pour afficher le
    sortie de l'application.

Ce que je veux, c'est pour que l'utilisateur d'entrer des commandes dans la première zone de texte, appuyez sur le bouton pour passer et recevoir des commentaires par l'intermédiaire de la deuxième zone de texte.

Je sais comment les utiliser ProcessStartInfo.RedirectStandardOutput mais, cependant, l'application se bloque lorsque j'utilise StandardOutput.ReadToEnd().

J'ai eu un coup d'oeil à l'asynchrone Process.BeginOutputReadLine() mais, même si mon application n'accroche pas, de toute façon je n'obtenez pas de réponse dans la zone de texte, il ne fait absolument rien.

Voici mon code:

public partial class MainForm : Form
{

    private void MainForm_Load(object sender, EventArgs e)
    {
        InitializeInterpreter();
    }

    private void InitializeInterpreter()
    {
        InterProc.StartInfo.UseShellExecute = false;
        InterProc.StartInfo.FileName = "app.exe";
        InterProc.StartInfo.RedirectStandardInput = true;
        InterProc.StartInfo.RedirectStandardOutput = true;
        InterProc.StartInfo.RedirectStandardError = true;
        InterProc.StartInfo.CreateNoWindow = true;
        InterProc.OutputDataReceived += new DataReceivedEventHandler(InterProcOutputHandler);

        InterProc.Start();
    }

    private static void InterProcOutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
    {
        if (!String.IsNullOrEmpty(outLine.Data))
        {
           OutputTextBox.Append(Environment.NewLine + outLine.Data);
        }
    }

    private void Enterbutton_Click(object sender, EventArgs e)
    {
        InterProc.StandardInput.Write(CommandtextBox.Text);
        InterProc.BeginOutputReadLine();
    }
}

Est-il possible que je puisse avoir cette exécution en douceur? Merci.

  • <muet commentaire>vous savez que Vous pouvez le faire sans la redirection standard in/out?</muet commentaire> je suppose que vous êtes l'examen de re-direction des œuvres, mais vous n'avez pas déclaré que dans votre question.
  • Pouvez-vous veuillez donner des détails sur qui?
  • Par "Ce que je veux, c'est pour que l'utilisateur d'entrer des commandes dans la première zone de texte, appuyez sur le bouton pour passer et recevoir des commentaires par l'intermédiaire de la deuxième zone de texte" ne vous fait dire "entrer une commande (qui normalement exécuter dans une invite de commande/fenêtre"dos"), exécutez la commande en arrière-plan, et afficher les commandes de sortie de la deuxième zone de texte"? Si donc ignorer ce que je viens de dire.
  • Yep, c'est ce que je voulais dire.
InformationsquelleAutor Zach | 2009-11-19