0

こんにちは、Windows アプリケーション フォームから読み書きできる単一の cmd プロセスを開始したいと考えています。入力するコマンドごとに新しい cmd プロセスを作成し続けたくないことを強調したいと思います。私のコードは今めちゃくちゃです。. . 現在、テキスト ボックスが 2 つとボタンが 1 つだけの Windows フォーム アプリケーションがあります。Textbox1 は出力用です。入力用のTextbox2。ボタンは入力を送信するためのものです。

    Process cmd = new Process();
    ProcessStartInfo psi = new ProcessStartInfo()
    {
         FileName = "cmd.exe",

         UseShellExecute = false,
         CreateNoWindow = true,
         RedirectStandardOutput = true,
         RedirectStandardInput = true
    };

    StreamReader sr;
    StreamWriter sw;


    private void Form1_Load(object sender, EventArgs e)
    {
        cmd.StartInfo = psi;
        cmd.Start();

        sr = cmd.StandardOutput;

        sw = cmd.StandardInput;
        sw.AutoFlush = true;

        System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(GetOutput));
        t.Start();

    }

    delegate void Write(string Text);
    private void SetTextBox(string Text)
    {
        if (textBox1.InvokeRequired)
        {
            textBox1.Invoke(new Write(SetTextBox),Text);
        }
        else
            textBox1.Text += Text;
    }

    private void GetOutput()
    {
        while (true)
        {
            if (sr.Peek() != -1)
                SetTextBox(sr.ReadToEnd());
            else
                System.Threading.Thread.Sleep(1000);

        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        sw.WriteLine(textBox2.Text);
        textBox2.Clear();
    }
4

1 に答える 1

0

CMD.exeに開くように指示する/k引数を使用してみて、指定されたコマンドを実行してから、ウィンドウを開いたままにします。

于 2012-08-18T13:30:07.233 に答える