0

嗨,我想启动一个 cmd 进程,我可以从中读取和写入我的 Windows 应用程序表单。我想强调我不想继续为我输入的每个命令创建一个新的 cmd 进程。我的代码现在一团糟。. . 我现在有一个只有 2 个文本框和一个按钮的 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

尝试使用 /k 参数,它告诉 CMD.exe 打开,运行指定的命令,然后保持窗口打开。

于 2012-08-18T13:30:07.233 回答